1*67e74705SXin Li // RUN: %clang_cc1 -fsyntax-only -verify %s 2*67e74705SXin Li 3*67e74705SXin Li namespace PR8640 { 4*67e74705SXin Li template<class T1> struct C1 { c1PR8640::C15*67e74705SXin Li virtual void c1() { 6*67e74705SXin Li T1 t1 = 3; // expected-error {{cannot initialize a variable}} 7*67e74705SXin Li } 8*67e74705SXin Li }; 9*67e74705SXin Li 10*67e74705SXin Li template<class T2> struct C2 { c2PR8640::C211*67e74705SXin Li void c2() { 12*67e74705SXin Li new C1<T2>(); // expected-note {{in instantiation of member function}} 13*67e74705SXin Li } 14*67e74705SXin Li }; 15*67e74705SXin Li f()16*67e74705SXin Li void f() { 17*67e74705SXin Li C2<int*> c2; 18*67e74705SXin Li c2.c2(); // expected-note {{in instantiation of member function}} 19*67e74705SXin Li } 20*67e74705SXin Li } 21*67e74705SXin Li 22*67e74705SXin Li namespace PR9325 { 23*67e74705SXin Li template<typename T> 24*67e74705SXin Li class Target 25*67e74705SXin Li { 26*67e74705SXin Li public: Value() const27*67e74705SXin Li virtual T Value() const 28*67e74705SXin Li { 29*67e74705SXin Li return 1; // expected-error{{cannot initialize return object of type 'int *' with an rvalue of type 'int'}} 30*67e74705SXin Li } 31*67e74705SXin Li }; 32*67e74705SXin Li 33*67e74705SXin Li template<typename T> 34*67e74705SXin Li struct Provider 35*67e74705SXin Li { 36*67e74705SXin Li static Target<T> Instance; 37*67e74705SXin Li }; 38*67e74705SXin Li 39*67e74705SXin Li template<typename T> 40*67e74705SXin Li Target<T> Provider<T>::Instance; // expected-note{{in instantiation of}} 41*67e74705SXin Li f()42*67e74705SXin Li void f() 43*67e74705SXin Li { 44*67e74705SXin Li Target<int*>* traits = &Provider<int*>::Instance; // expected-note{{requested here}} 45*67e74705SXin Li } 46*67e74705SXin Li } 47*67e74705SXin Li 48*67e74705SXin Li namespace PR10020 { 49*67e74705SXin Li struct MG { 50*67e74705SXin Li virtual void Accept(int) = 0; 51*67e74705SXin Li }; 52*67e74705SXin Li 53*67e74705SXin Li template <typename Type> 54*67e74705SXin Li struct GMG : MG { AcceptPR10020::GMG55*67e74705SXin Li void Accept(int i) { 56*67e74705SXin Li static_cast<Type *>(0)->Accept(i); // expected-error{{member reference base}} 57*67e74705SXin Li } MethodPR10020::GMG58*67e74705SXin Li static GMG* Method() { return &singleton; } // expected-note{{in instantiation of}} 59*67e74705SXin Li static GMG singleton; 60*67e74705SXin Li }; 61*67e74705SXin Li 62*67e74705SXin Li template <typename Type> 63*67e74705SXin Li GMG<Type> GMG<Type>::singleton; // expected-note{{requested here}} 64*67e74705SXin Li test(void)65*67e74705SXin Li void test(void) { 66*67e74705SXin Li GMG<int>::Method(); // expected-note{{in instantiation of}} 67*67e74705SXin Li } 68*67e74705SXin Li } 69