| // 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>(); |
| } |