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