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