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