1ea285162342df160e7860e26528bc7110bc6c0cdShih-wei Liao// RUN: %clang_cc1 -fsyntax-only -verify %s 2ea285162342df160e7860e26528bc7110bc6c0cdShih-wei Liaostruct X0 { 3ea285162342df160e7860e26528bc7110bc6c0cdShih-wei Liao X0 f1(); 4ea285162342df160e7860e26528bc7110bc6c0cdShih-wei Liao X0 f2(); 5ea285162342df160e7860e26528bc7110bc6c0cdShih-wei Liao}; 6ea285162342df160e7860e26528bc7110bc6c0cdShih-wei Liao 7ea285162342df160e7860e26528bc7110bc6c0cdShih-wei Liaotemplate<typename T> 8ea285162342df160e7860e26528bc7110bc6c0cdShih-wei Liaostruct X1 { 9ea285162342df160e7860e26528bc7110bc6c0cdShih-wei Liao X1<T>(int); 10ea285162342df160e7860e26528bc7110bc6c0cdShih-wei Liao (X1<T>)(float); 11ea285162342df160e7860e26528bc7110bc6c0cdShih-wei Liao X1 f2(); 12ea285162342df160e7860e26528bc7110bc6c0cdShih-wei Liao X1 f2(int); 13ea285162342df160e7860e26528bc7110bc6c0cdShih-wei Liao X1 f2(float); 14ea285162342df160e7860e26528bc7110bc6c0cdShih-wei Liao}; 15ea285162342df160e7860e26528bc7110bc6c0cdShih-wei Liao 16ea285162342df160e7860e26528bc7110bc6c0cdShih-wei Liao// Error recovery: out-of-line constructors whose names have template arguments. 17ea285162342df160e7860e26528bc7110bc6c0cdShih-wei Liaotemplate<typename T> X1<T>::X1<T>(int) { } // expected-error{{out-of-line constructor for 'X1' cannot have template arguments}} 18ea285162342df160e7860e26528bc7110bc6c0cdShih-wei Liaotemplate<typename T> (X1<T>::X1<T>)(float) { } // expected-error{{out-of-line constructor for 'X1' cannot have template arguments}} 19ea285162342df160e7860e26528bc7110bc6c0cdShih-wei Liao 20ea285162342df160e7860e26528bc7110bc6c0cdShih-wei Liao// Error recovery: out-of-line constructor names intended to be types 21ea285162342df160e7860e26528bc7110bc6c0cdShih-wei LiaoX0::X0 X0::f1() { return X0(); } // expected-error{{qualified reference to 'X0' is a constructor name rather than a type wherever a constructor can be declared}} 22ea285162342df160e7860e26528bc7110bc6c0cdShih-wei Liao 23ea285162342df160e7860e26528bc7110bc6c0cdShih-wei Liaostruct X0::X0 X0::f2() { return X0(); } 24ea285162342df160e7860e26528bc7110bc6c0cdShih-wei Liao 25ea285162342df160e7860e26528bc7110bc6c0cdShih-wei Liaotemplate<typename T> X1<T>::X1<T> X1<T>::f2() { } // expected-error{{qualified reference to 'X1' is a constructor name rather than a template name wherever a constructor can be declared}} 26ea285162342df160e7860e26528bc7110bc6c0cdShih-wei Liaotemplate<typename T> X1<T>::X1<T> (X1<T>::f2)(int) { } // expected-error{{qualified reference to 'X1' is a constructor name rather than a template name wherever a constructor can be declared}} 27ea285162342df160e7860e26528bc7110bc6c0cdShih-wei Liaotemplate<typename T> struct X1<T>::X1<T> (X1<T>::f2)(float) { } 28