Perform additional semantic checking of class template
specializations. In particular:
- Make sure class template specializations have a "template<>"
header, and complain if they don't.
- Make sure class template specializations are declared/defined
within a valid context. (e.g., you can't declare a specialization
std::vector<MyType> in the global namespace).
git-svn-id: https://llvm.org/svn/llvm-project/cfe/trunk@65476 91177308-0d34-0410-b5e6-96231b3b80d8
diff --git a/lib/Sema/Sema.h b/lib/Sema/Sema.h
index fed2bbd..1d36d46 100644
--- a/lib/Sema/Sema.h
+++ b/lib/Sema/Sema.h
@@ -64,6 +64,7 @@
class TemplateArgument;
class TemplateParameterList;
class TemplateTemplateParmDecl;
+ class ClassTemplateDecl;
class ObjCInterfaceDecl;
class ObjCCompatibleAliasDecl;
class ObjCProtocolDecl;
@@ -1532,6 +1533,11 @@
SourceLocation RAngleLoc,
const CXXScopeSpec *SS);
+ bool CheckClassTemplateSpecializationScope(ClassTemplateDecl *ClassTemplate,
+ ClassTemplateSpecializationDecl *PrevDecl,
+ SourceLocation TemplateNameLoc,
+ SourceRange ScopeSpecifierRange);
+
virtual DeclTy *
ActOnClassTemplateSpecialization(Scope *S, unsigned TagSpec, TagKind TK,
SourceLocation KWLoc,