// RUN: %clang_cc1 -fsyntax-only -verify %s struct IntHolder { // expected-note{{here}} // expected-note 2{{candidate constructor (the implicit copy constructor)}} IntHolder(int); // expected-note 2{{candidate constructor}} }; template struct X { // expected-note{{here}} void f() { T t; // expected-error{{no matching}} } void g() { } struct Inner { // expected-error{{implicit default}} T value; // expected-note {{member is declared here}} }; static T value; }; template T X::value; // expected-error{{no matching constructor}} IntHolder &test_X_IntHolderInt(X xih) { xih.g(); // okay xih.f(); // expected-note{{instantiation}} X::Inner inner; // expected-note {{first required here}} return X::value; // expected-note{{instantiation}} } // Explicitly specialize the members of X to not cause // problems with instantiation. template<> void X::f() { } template<> struct X::Inner { Inner() : value(17) { } IntHolder value; }; template<> IntHolder X::value = 17; IntHolder &test_X_IntHolderInt(X xih) { xih.g(); // okay xih.f(); // okay, uses specialization X::Inner inner; // okay, uses specialization return X::value; // okay, uses specialization } template<> X::X() { } // expected-error{{instantiated member}}