1// DR 408 2// { dg-do link } 3 4// Test that a size given in the out-of-class definition isn't used until 5// instantiation time. 6template<typename T> 7struct X 8{ 9 static char s[]; 10 int c; 11}; 12 13template<typename T> 14char X<T>::s[sizeof(X<T>)]; 15 16#define sassert(EXP) int ar[(EXP)?1:-1] 17sassert(sizeof (X<char>::s) == sizeof (int)); 18 19// Test that a specialization can have a different size. 20 21template <int> void g(); 22template <> void g<2>() { } 23 24template <typename T> 25struct S { 26 static int i[]; 27 void f(); 28}; 29 30template <typename T> 31int S<T>::i[] = { 1 }; 32 33template <typename T> 34void S<T>::f() { 35 g<sizeof (i) / sizeof (int)>(); 36} 37 38template <> 39int S<int>::i[] = { 1, 2 }; 40 41int main() 42{ 43 S<int> s; 44 s.f(); 45} 46