Lines Matching full:template

2 // RUN: %clang_cc1 -fsyntax-only -verify=expected,cpp14 -std=gnu++14 %s -fdelayed-template-parsing -DDELAYED_TEMPLATE_PARSING
8 export class foo { }; // expected-error {{expected template}}
9 template x; // expected-error {{a type specifier is required for all declarations}} \
11 export template x; // expected-error {{expected '<' after 'template'}}
12 export template<class T> class x0; // expected-warning {{exported templates are unsupported}}
13 template < ; // expected-error {{expected template parameter}} \
14 // expected-error{{expected ',' or '>' in template-parameter-list}} \
16 template <int +> struct x1; // expected-error {{expected ',' or '>' in template-parameter-list}}
18 // verifies that we only walk to the ',' & still produce errors on the rest of the template parameters
19 template <int +, T> struct x2; // expected-error {{expected ',' or '>' in template-parameter-list}} \
21 template<template<int+>> struct x3; // expected-error {{expected ',' or '>' in template-parameter-list}} \
22 cpp14-error {{template template parameter requires 'class' after the parameter list}} \
23 cpp17-error {{template template parameter requires 'class' or 'typename' after the parameter list}}
24 template <template X> struct Err1; // expected-error {{expected '<' after 'template'}} \
26 template <template <typename> > struct Err2; // cpp14-error {{template template parameter requires 'class' after the parameter list}}
27 // cpp17-error@-1{{template template parameter requires 'class' or 'typename' after the parameter list}}
28 template <template <typename> Foo> struct Err3; // cpp14-error {{template template parameter requires 'class' after the parameter list}}
29 // cpp17-error@-1{{template template parameter requires 'class' or 'typename' after the parameter list}}
31 template <template <typename> typename Foo> struct Cxx1z;
36 // Template function declarations
37 template <typename T> void foo();
38 template <typename T, typename U> void foo();
40 // Template function definitions.
41 template <typename T> void foo() { }
43 // Template class (forward) declarations
44 template <typename T> struct A;
45 template <typename T, typename U> struct b;
46 template <typename> struct C;
47 template <typename, typename> struct D;
50 template <typename T = int> class X1;
51 template <typename = int> class X2;
53 // Forward declarations w/template template parameters
54 template <template <typename> class T> class TTP1;
55 template <template <typename> class> class TTP2;
56 template <template <typename> class T = foo> class TTP3; // expected-error{{must be a class template}}
57 template <template <typename> class = foo> class TTP3; // expected-error{{must be a class template}}
58 template <template <typename X, typename Y> class T> class TTP5;
61 template <int> class NTP0;
62 template <int N> class NTP1;
63 template <int N = 5> class NTP2;
64 template <int = 10> class NTP3;
65 template <unsigned int N = 12u> class NTP4;
66 template <unsigned int = 12u> class NTP5;
67 template <unsigned = 15u> class NTP6;
68 template <typename T, T Obj> class NTP7;
70 // Template class declarations
71 template <typename T> struct A { };
72 template <typename T, typename U> struct B { };
74 // Template parameter shadowing
75 template<typename T, // expected-note{{template parameter is declared here}}
76 typename T> // expected-error{{declaration of 'T' shadows template parameter}}
79 template<typename T> // expected-note{{template parameter is declared here}}
80 void shadow2(int T); // expected-error{{declaration of 'T' shadows template parameter}}
82 template<typename T> // expected-note{{template parameter is declared here}}
83 class T { // expected-error{{declaration of 'T' shadows template parameter}}
86 template<int Size> // expected-note{{template parameter is declared here}}
87 void shadow3(int Size); // expected-error{{declaration of 'Size' shadows template parameter}}
89 template<typename T> // expected-note{{here}}
94 template<typename T> // expected-note{{here}}
99 template<typename T, // expected-note{{template parameter is declared here}}
100 T T> // expected-error{{declaration of 'T' shadows template parameter}}
103 template<typename T, // expected-note{{template parameter is declared here}}
104 template<typename> class T> // expected-error{{declaration of 'T' shadows template parameter}}
108 template<template<typename> class T> struct shadow8 { // expected-note{{template parameter is declared here}}
109 template<template<typename> class T> struct inner; // expected-error{{declaration of 'T' shadows template parameter}}
112 // Non-type template parameters in scope
113 template<int Size>
123 template<typename T>
133 template <> struct S<int> { }; // expected-error{{explicit specialization of undeclared template struct 'S'}}
134 template <> union U<int> { }; // expected-error{{explicit specialization of undeclared template union 'U'}}
138 template <> struct SS<int> { }; // expected-error{{explicit specialization of non-template struct 'SS'}}
139 template <> union UU<int> { }; // expected-error{{explicit specialization of non-template union 'UU'}}
143 template <typename T>
147 template <typename T>
151 // This PR occurred only in template parsing mode.
153 template <int>
155 template <typename T>
157 template <typename U>
162 template <int k>
163 template <typename T>
164 template <typename U>
186 template<bool b> struct bool_ { typedef int type; };
187 template<> struct bool_<false> { };
194 template <int>
196 template <typename T>
198 template <typename U>
203 template <int k>
204 template <typename T>
205 template <typename U>
208 template<>
209 template<>
210 template<typename U>
222 // We failed to diagnose function template specialization definitions inside
224 template <class> void FuncTemplate() {}
228 typename template <> void FuncTemplate<void>() { }
235 template<typename T>
251 template<typename T> void f(T);
252 template void f<int>(int); // expected-error {{expected '<' after 'template'}}
253 template void f(float); // expected-error {{expected '<' after 'template'}}
254 extern template // expected-error {{expected member name or ';'}}
260 template<int SomeTemplateName<void>> struct A; // expected-error {{parameter name cannot have template arguments}}
261 template<int operator+> struct B; // expected-error {{'operator+' cannot be the name of a parameter}}
263 template<int Q::N> struct C; // expected-error {{parameter declarator cannot be qualified}}
264 template<int f(int a = 0)> struct D; // expected-error {{default arguments can only be specified for parameters in a function declaration}}
268 template<int I, int J> struct A { };
269 template<int J> struct A<0, J> { }; // expected-note {{J = 0}}
270 template<int I> struct A<I, 0> { }; // expected-note {{I = 0}}
276 template<class=class a::template b<>> struct X {}; // expected-error {{undeclared identifier 'a'}}
280 template <typename FnT,
281 typename T = typename ABC<FnT>::template arg_t<0>> // expected-error {{no template named 'ABC'}}
288 template<int> int b;
289 template<int> auto f() -> b<0>; // expected-error +{{}}
293 template; // expected-error {{declaration does not declare anything}}
294 template<>; // expected-error {{declaration does not declare anything}}
295 template<int>; // expected-error {{declaration does not declare anything}}
296 template int; // expected-error {{declaration does not declare anything}}
297 template<> int; // expected-error {{declaration does not declare anything}}
298 template<int> int; // expected-error {{declaration does not declare anything}}
302 void foo() { template <typename> int i; } // expected-error {{templates can only be declared in namespace or class scope}}