diff options
-rw-r--r-- | clang/test/CXX/temp/temp.spec/temp.expl.spec/p2.cpp | 40 |
1 files changed, 33 insertions, 7 deletions
diff --git a/clang/test/CXX/temp/temp.spec/temp.expl.spec/p2.cpp b/clang/test/CXX/temp/temp.spec/temp.expl.spec/p2.cpp index 0ba95d875ad..9c6c5edc504 100644 --- a/clang/test/CXX/temp/temp.spec/temp.expl.spec/p2.cpp +++ b/clang/test/CXX/temp/temp.spec/temp.expl.spec/p2.cpp @@ -58,7 +58,8 @@ struct X0 { // expected-note 2{{here}} struct Inner : public T { }; // expected-note 3{{here}} template<typename U> - struct InnerTemplate : public T { }; + struct InnerTemplate : public T { }; // expected-note 2{{explicitly specialized}} \ + // expected-error{{base specifier}} template<typename U> void ft1(T t, U u); @@ -170,15 +171,40 @@ N0::X0<long>::Inner inner2; N0::X0<float>::Inner inner3; N0::X0<double>::Inner inner4; // expected-error{{incomplete}} -#if 0 -// FIXME: update the remainder of this test to check for scopes properly. // -- member class template of a class template -template<> -template<> -struct X0<void*>::InnerTemplate<int> { }; +namespace N0 { + template<> + template<> + struct X0<void*>::InnerTemplate<int> { }; + + template<> template<> + struct X0<int>::InnerTemplate<int>; // expected-note{{forward declaration}} + + template<> template<> + struct X0<int>::InnerTemplate<long>; -X0<void*>::InnerTemplate<int> inner_template0; + template<> template<> + struct X0<int>::InnerTemplate<double>; +} + +template<> template<> +struct N0::X0<int>::InnerTemplate<long> { }; // okay + +template<> template<> +struct N0::X0<int>::InnerTemplate<float> { }; // expected-error{{class template specialization}} +namespace N1 { + template<> template<> + struct N0::X0<int>::InnerTemplate<double> { }; // expected-error{{enclosing}} +} + +N0::X0<void*>::InnerTemplate<int> inner_template0; +N0::X0<int>::InnerTemplate<int> inner_template1; // expected-error{{incomplete}} +N0::X0<int>::InnerTemplate<long> inner_template2; +N0::X0<int>::InnerTemplate<unsigned long> inner_template3; // expected-note{{instantiation}} + +#if 0 +// FIXME: update the remainder of this test to check for scopes properly. // -- member function template of a class template template<> template<> |