1 // RUN: %clang_cc1 -fsyntax-only -verify %s
2 template<class T1>
3 class A {
4   template<class T2> class B {
5     void mf();
6   };
7 };
8 
9 template<> template<> class A<int>::B<double>;
10 template<> template<> void A<char>::B<char>::mf();
11 
12 template<> void A<char>::B<int>::mf(); // expected-error{{requires 'template<>'}}
13 
14 namespace test1 {
15   template <class> class A {
16     static int foo;
17     static int bar;
18   };
19   typedef A<int> AA;
20 
21   template <> int AA::foo = 0;
22   int AA::bar = 1; // expected-error {{template specialization requires 'template<>'}}
23   int A<float>::bar = 2; // expected-error {{template specialization requires 'template<>'}}
24 
25   template <> class A<double> {
26   public:
27     static int foo;
28     static int bar;
29   };
30 
31   typedef A<double> AB;
32   template <> int AB::foo = 0; // expected-error{{extraneous 'template<>'}}
33   int AB::bar = 1;
34 }
35