xref: /llvm-project/clang/test/CXX/dcl.decl/dcl.meaning/dcl.meaning.general/p3.cpp (revision 7ecfb66c77ad77dabbb705cbb1f3b17a3d1391a4)
1 // RUN: %clang_cc1 -fsyntax-only -verify %s
2 
3 namespace N0 {
4   template<typename T>
5   void f0();
6 
7   template<typename T>
8   int x0 = 0;
9 
10   template<typename T>
11   class C0;
12 }
13 using namespace N0;
14 
15 template<>
16 void f0<int>(); // expected-error {{no function template matches}}
17 
18 template<>
19 int x0<int>;
20 
21 template<>
22 class C0<int>;
23 
24 namespace N1 {
25   namespace N2 {
26     template<typename T>
27     void f2();
28 
29     template<typename T>
30     int x2 = 0;
31 
32     template<typename T>
33     class C2;
34   }
35   using namespace N2;
36 }
37 
38 template<>
39 void N1::f2<int>(); // expected-error {{no function template matches}}
40 
41 template<>
42 int N1::x2<int>;
43 
44 template<>
45 class N1::C2<int>;
46 
47 namespace N3 {
48   namespace N4 {
49     template<typename T>
50     void f4();
51 
52     template<typename T>
53     int x4 = 0;
54 
55     template<typename T>
56     class C4;
57   }
58   using N4::f4;
59   using N4::x4;
60   using N4::C4;
61 }
62 
63 template<>
64 void N3::f4<int>(); // expected-error {{no function template matches}}
65 
66 template<>
67 int N3::x4<int>;
68 
69 template<>
70 class N3::C4<int>;
71 
72 inline namespace N5 {
73   template<typename T>
74   void f5();
75 
76   template<typename T>
77   int x5 = 0;
78 
79   template<typename T>
80   class C5;
81 }
82 
83 template<>
84 void f5<int>();
85 
86 template<>
87 int x5<int>;
88 
89 template<>
90 class C5<int>;
91 
92 namespace N6 {
93   inline namespace N7 {
94     template<typename T>
95     void f7();
96 
97     template<typename T>
98     int x7 = 0;
99 
100     template<typename T>
101     class C7;
102   }
103 }
104 
105 template<>
106 void N6::f7<int>();
107 
108 template<>
109 int N6::x7<int>;
110 
111 template<>
112 class N6::C7<int>;
113