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