struct C { };
template<typename T>
struct X0 {
T value; };
template struct X0<int>;
template struct X0<void>;
template<typename T>
void f0(T t) {
++t; }
template void f0(int);
template void f0<long>(long);
template void f0<>(unsigned);
template void f0(int C::*);
template<typename T>
struct X1 {
template<typename U>
struct Inner {
T member1;
U member2; };
template<typename U>
void f(T& t, U u) {
t = u; }
};
template struct X1<int>::Inner<float>;
template struct X1<int>::Inner<double>;
template struct X1<int>::Inner<void>;
template void X1<int>::f(int&, float);
template void X1<int>::f<long>(int&, long);
template void X1<int>::f<>(int&, double);
template void X1<int>::f<>(int&, int*);
struct Incomplete; struct NonDefaultConstructible { #if __cplusplus >= 201103L
#endif
NonDefaultConstructible(int); };
template<typename T, typename U>
struct X2 {
void f(T &t, U u) {
t = u; }
struct Inner {
T member1;
U member2; };
static T static_member1;
static U static_member2;
};
template<typename T, typename U>
T X2<T, U>::static_member1 = 17;
template<typename T, typename U>
U X2<T, U>::static_member2;
template void X2<int, float>::f(int &, float);
template void X2<int, float>::f(int &, double); template void X2<int, int*>::f(int&, int*);
template struct X2<int, float>::Inner;
template struct X2<int, Incomplete>::Inner;
template int X2<int, float>::static_member1;
template int* X2<int*, float>::static_member1; template
NonDefaultConstructible X2<NonDefaultConstructible, int>::static_member1;
template
NonDefaultConstructible X2<int, NonDefaultConstructible>::static_member2;