Home | History | Annotate | Download | only in temp.explicit
      1 // RUN: %clang_cc1 -fsyntax-only -verify %s
      2 
      3 template<typename T>
      4 struct X0 {
      5   void f(T&);
      6 
      7   struct Inner;
      8 
      9   static T static_var;
     10 };
     11 
     12 template<typename T>
     13 void X0<T>::f(T& t) {
     14   t = 1; // expected-error{{incompatible type}}
     15 }
     16 
     17 template<typename T>
     18 struct X0<T>::Inner {
     19   T member;
     20 };
     21 
     22 template<typename T>
     23 T X0<T>::static_var = 1; // expected-error{{cannot initialize}}
     24 
     25 extern template struct X0<void*>;
     26 template struct X0<void*>; // expected-note 2{{instantiation}}
     27 
     28 template struct X0<int>; // expected-note 4{{explicit instantiation definition is here}}
     29 
     30 extern template void X0<int>::f(int&); // expected-error{{follows explicit instantiation definition}}
     31 extern template struct X0<int>::Inner; // expected-error{{follows explicit instantiation definition}}
     32 extern template int X0<int>::static_var; // expected-error{{follows explicit instantiation definition}}
     33 extern template struct X0<int>; // expected-error{{follows explicit instantiation definition}}
     34