1 // RUN: %clang_cc1 -fsyntax-only -verify -pedantic -Wc++11-compat %s
2 
3 // Example from the standard
mf()4 template<class T> class Array { void mf() { } };
5 
6 template class Array<char>;
7 template void Array<int>::mf();
sort(Array<T> & v)8 template<class T> void sort(Array<T>& v) { /* ... */ }
9 template void sort(Array<char>&);
10 namespace N {
f(T &)11   template<class T> void f(T&) { }
12 }
13 template void N::f<int>(int&);
14 
15 
16 template<typename T>
17 struct X0 {
18   struct Inner {};
fX019   void f() { }
20   static T value;
21 };
22 
23 template<typename T>
24 T X0<T>::value = 17;
25 
26 typedef X0<int> XInt;
27 
28 template struct XInt::Inner; // expected-warning{{template-id}}
29 template void XInt::f(); // expected-warning{{template-id}}
30 template int XInt::value; // expected-warning{{template-id}}
31 
32 namespace N {
33   template<typename T>
34   struct X1 { // expected-note{{explicit instantiation refers here}}
35   };
36 
37   template<typename T>
f1(T)38   void f1(T) {} // expected-note{{explicit instantiation refers here}}
39 }
40 using namespace N;
41 
42 template struct X1<int>; // expected-warning{{must occur in}}
43 template void f1(int); // expected-warning{{must occur in}}
44