@@ -24,7 +24,7 @@ namespace N0 {
2424 void test_f0 (NonDefaultConstructible NDC) {
2525 f0 (NDC);
2626 }
27-
27+
2828 template <> void f0 (int );
2929 template <> void f0 (long );
3030}
@@ -39,34 +39,34 @@ template<> void N0::f0(double) { }
3939
4040struct X1 {
4141 template <typename T> void f (T);
42-
42+
4343 template <> void f (int ); // OK (DR727)
4444};
4545
4646// -- class template
4747namespace N0 {
48-
48+
4949template <typename T>
5050struct X0 { // expected-note {{here}}
5151 static T member;
52-
52+
5353 void f1 (T t) {
5454 t = 17 ;
5555 }
56-
56+
5757 struct Inner : public T { }; // expected-note 2{{here}}
58-
58+
5959 template <typename U>
6060 struct InnerTemplate : public T { }; // expected-note 1{{explicitly specialized}} \
6161 // expected-error{{base specifier}}
62-
62+
6363 template <typename U>
6464 void ft1 (T t, U u);
6565};
6666
6767}
6868
69- template <typename T>
69+ template <typename T>
7070template <typename U>
7171void N0::X0<T>::ft1(T t, U u) {
7272 t = u;
@@ -85,35 +85,36 @@ namespace N0 {
8585 template <> struct X0 <volatile void >;
8686}
8787
88- template <> struct N0 ::X0<volatile void > {
88+ template <> struct N0 ::X0<volatile void > {
8989 void f1 (void *);
9090};
9191
9292// -- variable template [C++1y]
9393namespace N0 {
9494template <typename T> int v0; // expected-note 4{{explicitly specialized declaration is here}}
95- template <> extern int v0<char [1 ]>;
96- template <> extern int v0<char [2 ]>;
97- template <> extern int v0<char [5 ]>;
98- template <> extern int v0<char [6 ]>;
95+ template <> int v0<char [1 ]>; // expected-note {{previous definition is here}}
96+ template <> int v0<char [2 ]>;
97+ template <> int v0<char [5 ]>; // expected-note {{previous definition is here}}
98+ template <> int v0<char [6 ]>;
9999}
100100using N0::v0;
101101
102102template <typename T> int v1; // expected-note 4{{explicitly specialized declaration is here}}
103- template <> extern int v1<char [3 ]>;
104- template <> extern int v1<char [4 ]>;
105- template <> extern int v1<char [7 ]>;
106- template <> extern int v1<char [8 ]>;
103+ template <> int v1<char [3 ]>; // expected-note {{previous definition is here}}
104+ template <> int v1<char [4 ]>; // expected-note {{previous definition is here}}
105+ template <> int v1<char [7 ]>; // expected-note {{previous definition is here}}
106+ template <> int v1<char [8 ]>;
107107
108108template <> int N0::v0<int [1 ]>;
109109template <> int v0<int [2 ]>;
110110template <> int ::v1<int [3 ]>; // expected-warning {{extra qualification}}
111111template <> int v1<int [4 ]>;
112112
113- template <> int N0::v0<char [1 ]>;
113+ template <> int N0::v0<char [1 ]>; // expected-error {{redefinition of 'v0<char[1]>'}}
114114template <> int v0<char [2 ]>;
115115template <> int ::v1<char [3 ]>; // expected-warning {{extra qualification}}
116- template <> int v1<char [4 ]>;
116+ // expected-error@-1 {{redefinition of 'v1<char[3]>'}}
117+ template <> int v1<char [4 ]>; // expected-error {{redefinition of 'v1<char[4]>'}}
117118
118119namespace N1 {
119120template <> int N0::v0<int [5 ]>; // expected-error {{not in a namespace enclosing 'N0'}}
@@ -122,8 +123,10 @@ template<> int ::v1<int[7]>; // expected-error {{must occur at global scope}}
122123template <> int v1<int [8 ]>; // expected-error {{must occur at global scope}}
123124
124125template <> int N0::v0<char [5 ]>; // expected-error {{not in a namespace enclosing 'N0'}}
126+ // expected-error@-1 {{redefinition of 'v0<char[5]>'}}
125127template <> int v0<char [6 ]>; // expected-error {{not in a namespace enclosing 'N0'}}
126128template <> int ::v1<char [7 ]>; // expected-error {{must occur at global scope}}
129+ // expected-error@-1 {{redefinition of 'v1<char[7]>'}}
127130template <> int v1<char [8 ]>; // expected-error {{must occur at global scope}}
128131}
129132
@@ -147,13 +150,13 @@ void test_x0_cvvoid(N0::X0<const volatile void*> x0, const volatile void *cvp) {
147150// -- static data member of a class template
148151namespace N0 {
149152 // This actually tests p15; the following is a declaration, not a definition.
150- template <>
153+ template <>
151154 NonDefaultConstructible X0<NonDefaultConstructible>::member;
152-
155+
153156 template <> long X0<long >::member = 17 ;
154157
155158 template <> float X0<float >::member;
156-
159+
157160 template <> double X0<double >::member;
158161}
159162
@@ -171,7 +174,7 @@ namespace N1 {
171174
172175// -- member class of a class template
173176namespace N0 {
174-
177+
175178 template <>
176179 struct X0 <void *>::Inner { };
177180
@@ -213,7 +216,7 @@ namespace N0 {
213216 template <>
214217 template <>
215218 struct X0 <void *>::InnerTemplate<int > { };
216-
219+
217220 template <> template <>
218221 struct X0 <int >::InnerTemplate<int >; // expected-note{{forward declaration}}
219222
@@ -245,7 +248,7 @@ namespace N0 {
245248 template <>
246249 template <>
247250 void X0<void *>::ft1(void *, const void *) { }
248-
251+
249252 template <> template <>
250253 void X0<void *>::ft1(void *, int );
251254
@@ -279,7 +282,7 @@ namespace has_inline_namespaces {
279282 inline namespace inner {
280283 template <class T > void f (T&);
281284
282- template <class T >
285+ template <class T >
283286 struct X0 {
284287 struct MemberClass ;
285288
@@ -330,10 +333,10 @@ template<> struct has_inline_namespaces::X0<X4>::MemberClass { };
330333
331334template <> void has_inline_namespaces::X0<X4>::mem_func();
332335
333- template <> template <typename T>
336+ template <> template <typename T>
334337struct has_inline_namespaces ::X0<X4>::MemberClassTemplate { };
335338
336- template <> template <typename T>
339+ template <> template <typename T>
337340void has_inline_namespaces::X0<X4>::mem_func_template(T&) { }
338341
339342template <> int has_inline_namespaces::X0<X4>::value = 13 ;
0 commit comments