// RUN: %clang_cc1 -fsyntax-only %s -Wall template <typename T> class A { struct { }; }; A<int> a0; template <typename T> struct B { union { int a; void* b; }; void f() { a = 10; b = 0; } }; B<int> b0; template <typename T> struct C { union { int a; void* b; }; C(int a) : a(a) { } C(void* b) : b(b) { } }; C<int> c0(0); namespace PR7088 { template<typename T> void f() { union { int a; union { float real; T d; }; }; a = 17; d = 3.14; } template void f<double>(); } // Check for problems related to PR7402 that occur when template instantiation // instantiates implicit initializers. namespace PR7402 { struct X { union { struct { int x; int y; }; int v[2]; }; // Check that this requirement survives instantiation. template <typename T> X(const T& t) : x(t), y(t) {} }; X x(42.0); } namespace PR9188 { struct X0 { union { int member; }; }; static union { int global; }; struct X1 : X0 { template<typename T> int f() { return this->X0::member + PR9188::global; } }; template int X1::f<int>(); }