instantiate-expr-5.cpp revision 82b0001f79568199c7e5aa564f7ca9d43cc89d86
1// RUN: %clang_cc1 -fsyntax-only -verify %s 2 3template <class A> int x(A x) { return x++; } 4int y() { return x<int>(1); } 5 6namespace PR5880 { 7 template<typename T> 8 struct A { 9 static const int a = __builtin_offsetof(T, a.array[5].m); // expected-error{{no member named 'a' in 'HasM'}} 10 }; 11 struct HasM { 12 float m; 13 }; 14 15 struct ArrayOfHasM { 16 HasM array[10]; 17 }; 18 19 struct B { ArrayOfHasM a; }; 20 A<B> x; 21 A<HasM> x2; // expected-note{{in instantiation of}} 22 23 template<typename T> 24 struct AnonymousUnion { 25 union { 26 int i; 27 float f; 28 }; 29 }; 30 31 template<typename T> 32 void test_anon_union() { 33 int array1[__builtin_offsetof(AnonymousUnion<T>, f) == 0? 1 : -1]; 34 int array2[__builtin_offsetof(AnonymousUnion<int>, f) == 0? 1 : -1]; 35 } 36 37 template void test_anon_union<int>(); 38} 39 40namespace AddrOfClassMember { 41 template <typename T> struct S { 42 int n; 43 static void f() { 44 +T::n; // expected-error {{invalid use of member}} 45 } 46 }; 47 void g() { S<S<int> >::f(); } // expected-note {{in instantiation of}} 48} 49