1 // RUN: %clang_cc1 -fsyntax-only -verify %s 2 // RUN: %clang_cc1 -fsyntax-only -verify -std=c++98 %s 3 // RUN: %clang_cc1 -fsyntax-only -verify -std=c++11 %s 4 5 // Test instantiation of static data members declared out-of-line. 6 7 template<typename T> 8 struct X { 9 static T value; 10 }; 11 12 template<typename T> 13 T X<T>::value = 17; // expected-error{{no viable conversion}} 14 15 struct InitOkay { InitOkayInitOkay16 InitOkay(int) { } 17 }; 18 19 struct CannotInit { }; // expected-note{{candidate constructor (the implicit copy constructor) not viable}} 20 #if __cplusplus >= 201103L // C++11 or later 21 // expected-note@-2 {{candidate constructor (the implicit move constructor) not viable}} 22 #endif 23 returnInt()24int &returnInt() { return X<int>::value; } returnFloat()25float &returnFloat() { return X<float>::value; } 26 returnInitOkay()27InitOkay &returnInitOkay() { return X<InitOkay>::value; } 28 sizeOkay()29unsigned long sizeOkay() { return sizeof(X<CannotInit>::value); } 30 returnError()31CannotInit &returnError() { 32 return X<CannotInit>::value; // expected-note{{instantiation}} 33 } 34