1 // RUN: clang-cc -fsyntax-only -verify %s
2 
3 template<typename T, int N = 2> struct X; // expected-note{{template is declared here}}
4 
5 X<int, 1> *x1;
6 X<int> *x2;
7 
8 X<> *x3; // expected-error{{too few template arguments for class template 'X'}}
9 
10 template<typename U = float, int M> struct X;
11 
12 X<> *x4;
13 
14 template<typename T = int> struct Z { };
15 template struct Z<>;
16 
17 // PR4362
18 template<class T> struct a { };
19 template<> struct a<int> { static const bool v = true; };
20 
21 template<class T, bool = a<T>::v> struct p { }; // expected-error {{no member named 'v'}}
22 
23 template struct p<bool>; // expected-note {{in instantiation of default argument for 'p<bool>' required here}}
24 template struct p<int>;
25