1 // RUN: %clang_cc1 -fsyntax-only -verify %s 2 template<class T> struct A { 3 static T t; // expected-error{{static data member instantiated with function type 'int ()'}} 4 }; 5 typedef int function(); 6 A<function> a; // expected-note{{instantiation of}} 7 8 template<typename T> struct B { 9 B() { T t; } // expected-error{{variable instantiated with function type 'int ()'}} 10 }; 11 B<function> b; // expected-note{{instantiation of}} 12 13 template <typename T> int f0(void *, const T&); // expected-note{{candidate template ignored: substitution failure}} 14 enum {e}; // expected-note{{unnamed type used in template argument was declared here}} 15 16 void test_f0(int n) { 17 int i = f0(0, e); // expected-warning{{template argument uses unnamed type}} 18 int vla[n]; 19 f0(0, vla); // expected-error{{no matching function for call to 'f0'}} 20 } 21 22 namespace N0 { 23 template <typename R, typename A1> void f0(R (*)(A1)); 24 template <typename T> int f1(T); 25 template <typename T, typename U> int f1(T, U); 26 enum {e1}; // expected-note 2{{unnamed type used in template argument was declared here}} 27 enum {e2}; // expected-note 2{{unnamed type used in template argument was declared here}} 28 enum {e3}; // expected-note{{unnamed type used in template argument was declared here}} 29 30 template<typename T> struct X; 31 template<typename T> struct X<T*> { }; 32 33 void f() { 34 f0( // expected-warning{{template argument uses unnamed type}} 35 &f1<__typeof__(e1)>); // expected-warning{{template argument uses unnamed type}} 36 int (*fp1)(int, __typeof__(e2)) = f1; // expected-warning{{template argument uses unnamed type}} 37 f1(e2); // expected-warning{{template argument uses unnamed type}} 38 f1(e2); 39 40 X<__typeof__(e3)*> x; // expected-warning{{template argument uses unnamed type}} 41 } 42 } 43