1ea285162342df160e7860e26528bc7110bc6c0cdShih-wei Liao// RUN: %clang_cc1 -fsyntax-only -verify %s 2ea285162342df160e7860e26528bc7110bc6c0cdShih-wei Liao 3ea285162342df160e7860e26528bc7110bc6c0cdShih-wei Liaostruct IntHolder { // expected-note{{here}} // expected-note 2{{candidate constructor (the implicit copy constructor)}} 4ea285162342df160e7860e26528bc7110bc6c0cdShih-wei Liao IntHolder(int); // expected-note 2{{candidate constructor}} 5ea285162342df160e7860e26528bc7110bc6c0cdShih-wei Liao}; 6ea285162342df160e7860e26528bc7110bc6c0cdShih-wei Liao 7ea285162342df160e7860e26528bc7110bc6c0cdShih-wei Liaotemplate<typename T, typename U> 8ea285162342df160e7860e26528bc7110bc6c0cdShih-wei Liaostruct X { // expected-note{{here}} 9ea285162342df160e7860e26528bc7110bc6c0cdShih-wei Liao void f() { 10ea285162342df160e7860e26528bc7110bc6c0cdShih-wei Liao T t; // expected-error{{no matching}} 11ea285162342df160e7860e26528bc7110bc6c0cdShih-wei Liao } 12ea285162342df160e7860e26528bc7110bc6c0cdShih-wei Liao 13ea285162342df160e7860e26528bc7110bc6c0cdShih-wei Liao void g() { } 14ea285162342df160e7860e26528bc7110bc6c0cdShih-wei Liao 15ea285162342df160e7860e26528bc7110bc6c0cdShih-wei Liao struct Inner { // expected-error{{implicit default}} 16ea285162342df160e7860e26528bc7110bc6c0cdShih-wei Liao T value; // expected-note {{member is declared here}} 17ea285162342df160e7860e26528bc7110bc6c0cdShih-wei Liao }; 18ea285162342df160e7860e26528bc7110bc6c0cdShih-wei Liao 19ea285162342df160e7860e26528bc7110bc6c0cdShih-wei Liao static T value; 20ea285162342df160e7860e26528bc7110bc6c0cdShih-wei Liao}; 21ea285162342df160e7860e26528bc7110bc6c0cdShih-wei Liao 22ea285162342df160e7860e26528bc7110bc6c0cdShih-wei Liaotemplate<typename T, typename U> 23ea285162342df160e7860e26528bc7110bc6c0cdShih-wei LiaoT X<T, U>::value; // expected-error{{no matching constructor}} 24ea285162342df160e7860e26528bc7110bc6c0cdShih-wei Liao 25ea285162342df160e7860e26528bc7110bc6c0cdShih-wei LiaoIntHolder &test_X_IntHolderInt(X<IntHolder, int> xih) { 26ea285162342df160e7860e26528bc7110bc6c0cdShih-wei Liao xih.g(); // okay 27ea285162342df160e7860e26528bc7110bc6c0cdShih-wei Liao xih.f(); // expected-note{{instantiation}} 28ea285162342df160e7860e26528bc7110bc6c0cdShih-wei Liao 29ea285162342df160e7860e26528bc7110bc6c0cdShih-wei Liao X<IntHolder, int>::Inner inner; // expected-note {{first required here}} 30ea285162342df160e7860e26528bc7110bc6c0cdShih-wei Liao 31ea285162342df160e7860e26528bc7110bc6c0cdShih-wei Liao return X<IntHolder, int>::value; // expected-note{{instantiation}} 32ea285162342df160e7860e26528bc7110bc6c0cdShih-wei Liao} 33ea285162342df160e7860e26528bc7110bc6c0cdShih-wei Liao 34ea285162342df160e7860e26528bc7110bc6c0cdShih-wei Liao// Explicitly specialize the members of X<IntHolder, long> to not cause 35ea285162342df160e7860e26528bc7110bc6c0cdShih-wei Liao// problems with instantiation. 36ea285162342df160e7860e26528bc7110bc6c0cdShih-wei Liaotemplate<> 37ea285162342df160e7860e26528bc7110bc6c0cdShih-wei Liaovoid X<IntHolder, long>::f() { } 38ea285162342df160e7860e26528bc7110bc6c0cdShih-wei Liao 39ea285162342df160e7860e26528bc7110bc6c0cdShih-wei Liaotemplate<> 40ea285162342df160e7860e26528bc7110bc6c0cdShih-wei Liaostruct X<IntHolder, long>::Inner { 41ea285162342df160e7860e26528bc7110bc6c0cdShih-wei Liao Inner() : value(17) { } 42ea285162342df160e7860e26528bc7110bc6c0cdShih-wei Liao IntHolder value; 43ea285162342df160e7860e26528bc7110bc6c0cdShih-wei Liao}; 44ea285162342df160e7860e26528bc7110bc6c0cdShih-wei Liao 45ea285162342df160e7860e26528bc7110bc6c0cdShih-wei Liaotemplate<> 46ea285162342df160e7860e26528bc7110bc6c0cdShih-wei LiaoIntHolder X<IntHolder, long>::value = 17; 47ea285162342df160e7860e26528bc7110bc6c0cdShih-wei Liao 48ea285162342df160e7860e26528bc7110bc6c0cdShih-wei LiaoIntHolder &test_X_IntHolderInt(X<IntHolder, long> xih) { 49ea285162342df160e7860e26528bc7110bc6c0cdShih-wei Liao xih.g(); // okay 50ea285162342df160e7860e26528bc7110bc6c0cdShih-wei Liao xih.f(); // okay, uses specialization 51ea285162342df160e7860e26528bc7110bc6c0cdShih-wei Liao 52ea285162342df160e7860e26528bc7110bc6c0cdShih-wei Liao X<IntHolder, long>::Inner inner; // okay, uses specialization 53ea285162342df160e7860e26528bc7110bc6c0cdShih-wei Liao 54ea285162342df160e7860e26528bc7110bc6c0cdShih-wei Liao return X<IntHolder, long>::value; // okay, uses specialization 55ea285162342df160e7860e26528bc7110bc6c0cdShih-wei Liao} 56ea285162342df160e7860e26528bc7110bc6c0cdShih-wei Liao 57ea285162342df160e7860e26528bc7110bc6c0cdShih-wei Liaotemplate<> 58ea285162342df160e7860e26528bc7110bc6c0cdShih-wei LiaoX<IntHolder, long>::X() { } // expected-error{{instantiated member}} 59