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