Home | History | Annotate | Download | only in temp.expl.spec
      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