p1-inst.cpp revision b1622a1fd7b7f4ab8d00d0183d17c90ad25c14e3
1// RUN: %clang_cc1 -fsyntax-only -verify %s 2 3// Test instantiation of static data members declared out-of-line. 4 5template<typename T> 6struct X { 7 static T value; 8}; 9 10template<typename T> 11 T X<T>::value = 17; // expected-error{{no viable conversion}} 12 13struct InitOkay { 14 InitOkay(int) { } 15}; 16 17struct CannotInit { }; // expected-note{{candidate is the implicit copy constructor}} 18 19int &returnInt() { return X<int>::value; } 20float &returnFloat() { return X<float>::value; } 21 22InitOkay &returnInitOkay() { return X<InitOkay>::value; } 23 24unsigned long sizeOkay() { return sizeof(X<CannotInit>::value); } 25 26CannotInit &returnError() { 27 return X<CannotInit>::value; // expected-note{{instantiation}} 28} 29