1// { dg-options "-std=gnu++11" } 2// 3// Copyright (C) 2011-2015 Free Software Foundation, Inc. 4// 5// This file is part of the GNU ISO C++ Library. This library is free 6// software; you can redistribute it and/or modify it under the 7// terms of the GNU General Public License as published by the 8// Free Software Foundation; either version 3, or (at your option) 9// any later version. 10// 11// This library is distributed in the hope that it will be useful, 12// but WITHOUT ANY WARRANTY; without even the implied warranty of 13// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the 14// GNU General Public License for more details. 15// 16// You should have received a copy of the GNU General Public License along 17// with this library; see the file COPYING3. If not see 18// <http://www.gnu.org/licenses/>. 19 20#include <cmath> 21 22namespace a 23{ 24 template<typename> class Mat { }; 25 26 template<typename T> struct Mat2 : Mat<T> { }; 27 28 template<typename T> 29 int fdim(Mat<T>) { return 1; } 30 31 template<typename T, typename U> 32 int floor(Mat<T>, U) { return 1; } 33 template<typename T, typename U> 34 int floor(T, Mat<U>) { return 1; } 35 36 template<typename T, typename U, typename V> 37 int fma(Mat<T>, U, V) { return 1; } 38 template<typename T, typename U, typename V> 39 int fma(T, Mat<U>, V) { return 1; } 40 template<typename T, typename U, typename V> 41 int fma(T, U, Mat<V>) { return 1; } 42} 43 44int main() 45{ 46 int __attribute__((unused)) i; 47 48 using namespace std; 49 50 a::Mat2<double> c; 51 i = fdim(c); 52 i = floor(c, 0.); 53 i = floor(0., c); 54 i = floor(c, 1); 55 i = floor(1, c); 56 i = fma(c, 0., 1.); 57 i = fma(0., c, 1.); 58 i = fma(0., 1., c); 59 i = fma(c, 0., 1); 60 i = fma(0., c, 1); 61 i = fma(0., 1, c); 62} 63