// RUN: %clang_cc1 -fsyntax-only -verify -pedantic -Wc++11-compat %s // Example from the standard template<class T> class Array { void mf() { } }; template class Array<char>; template void Array<int>::mf(); template<class T> void sort(Array<T>& v) { /* ... */ } template void sort(Array<char>&); namespace N { template<class T> void f(T&) { } } template void N::f<int>(int&); template<typename T> struct X0 { struct Inner {}; void f() { } static T value; }; template<typename T> T X0<T>::value = 17; typedef X0<int> XInt; template struct XInt::Inner; // expected-warning{{template-id}} template void XInt::f(); // expected-warning{{template-id}} template int XInt::value; // expected-warning{{template-id}} namespace N { template<typename T> struct X1 { // expected-note{{explicit instantiation refers here}} }; template<typename T> void f1(T) {} // expected-note{{explicit instantiation refers here}} } using namespace N; template struct X1<int>; // expected-warning{{must occur in}} template void f1(int); // expected-warning{{must occur in}}