From 95ea45072a46ba3c85fc588aed15509a1a0900ed Mon Sep 17 00:00:00 2001 From: Douglas Gregor Date: Wed, 1 Jun 2011 22:37:07 +0000 Subject: [PATCH] Fix an incorrect warning about explicit template specializations for nested types, from Michael Han! git-svn-id: https://llvm.org/svn/llvm-project/cfe/trunk@132431 91177308-0d34-0410-b5e6-96231b3b80d8 --- lib/Sema/SemaTemplate.cpp | 2 +- .../temp.spec/temp.expl.spec/examples.cpp | 31 +++++++++++++++++++ 2 files changed, 32 insertions(+), 1 deletion(-) diff --git a/lib/Sema/SemaTemplate.cpp b/lib/Sema/SemaTemplate.cpp index ea084b49ee..1aa7364d18 100644 --- a/lib/Sema/SemaTemplate.cpp +++ b/lib/Sema/SemaTemplate.cpp @@ -1650,7 +1650,7 @@ Sema::MatchTemplateParametersToScopeSpecifier(SourceLocation DeclStartLoc, if (Spec->getSpecializationKind() != TSK_ExplicitSpecialization) NeedEmptyTemplateHeader = true; else - break; + continue; } else if (Record->getTemplateSpecializationKind()) { if (Record->getTemplateSpecializationKind() != TSK_ExplicitSpecialization && diff --git a/test/CXX/temp/temp.spec/temp.expl.spec/examples.cpp b/test/CXX/temp/temp.spec/temp.expl.spec/examples.cpp index f141e929a9..f04c544aa4 100644 --- a/test/CXX/temp/temp.spec/temp.expl.spec/examples.cpp +++ b/test/CXX/temp/temp.spec/temp.expl.spec/examples.cpp @@ -176,3 +176,34 @@ namespace PR9913 { template class S::F{}; } + +namespace template_class_spec_perClassDecl_nested +{ + template struct A { + template struct B { + template struct C { + static void foo(); + }; + }; + }; + + template <> struct A { + template struct B { + template struct C { + static void foo(); + }; + }; + }; + + template <> template struct A::B::C { + static void foo(); + }; + + template <> template <> struct A::B::C { + static void foo(); + }; + + template <> template<> template struct A::B::C { + static void foo(); + }; +} -- 2.40.0