DelayedTemplateParsing.cpp revision 9d38dbc9a16017fff3e34b7876a6590413a7d56b
1// RUN: %clang_cc1 -fms-extensions -fdelayed-template-parsing -fsyntax-only -verify %s 2 3template <class T> 4class A { 5 void foo() { 6 undeclared(); 7 } 8 void foo2(); 9}; 10 11template <class T> 12class B { 13 void foo4() { } // expected-note {{previous definition is here}} expected-note {{previous definition is here}} 14 void foo4() { } // expected-error {{class member cannot be redeclared}} expected-error {{redefinition of 'foo4'}} expected-note {{previous definition is here}} 15 16 friend void foo3() { 17 undeclared(); 18 } 19}; 20 21 22template <class T> 23void B<T>::foo4() {// expected-error {{redefinition of 'foo4'}} 24} 25 26template <class T> 27void A<T>::foo2() { 28 undeclared(); 29} 30 31 32template <class T> 33void foo3() { 34 undeclared(); 35} 36 37template void A<int>::foo2(); 38 39 40void undeclared() 41{ 42 43} 44 45template <class T> void foo5() {} //expected-note {{previous definition is here}} 46template <class T> void foo5() {} // expected-error {{redefinition of 'foo5'}} 47 48 49 50namespace Inner_Outer_same_template_param_name { 51 52template <class T> 53class Outmost { 54public: 55 template <class T> 56 class Inner { 57 public: 58 void f() { 59 T* var; 60 } 61 }; 62}; 63 64} 65 66