// RUN: %clang_cc1 -fsyntax-only %s -Wall template class A { struct { }; }; A a0; template struct B { union { int a; void* b; }; void f() { a = 10; b = 0; } }; B b0; template struct C { union { int a; void* b; }; C(int a) : a(a) { } C(void* b) : b(b) { } }; C c0(0); namespace PR7088 { template void f() { union { int a; union { float real; T d; }; }; a = 17; d = 3.14; } template void f(); } // 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 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 int f() { return this->X0::member + PR9188::global; } }; template int X1::f(); }