@@ -957,18 +957,20 @@ FunctionTemplateSpecializationInfo *FunctionTemplateSpecializationInfo::Create(
957957// ClassTemplateSpecializationDecl Implementation
958958// ===----------------------------------------------------------------------===//
959959
960- ClassTemplateSpecializationDecl::
961- ClassTemplateSpecializationDecl (ASTContext &Context, Kind DK, TagKind TK,
962- DeclContext *DC, SourceLocation StartLoc,
963- SourceLocation IdLoc,
964- ClassTemplateDecl *SpecializedTemplate,
965- ArrayRef<TemplateArgument> Args,
966- ClassTemplateSpecializationDecl *PrevDecl)
960+ ClassTemplateSpecializationDecl::ClassTemplateSpecializationDecl (
961+ ASTContext &Context, Kind DK, TagKind TK, DeclContext *DC,
962+ SourceLocation StartLoc, SourceLocation IdLoc,
963+ ClassTemplateDecl *SpecializedTemplate, ArrayRef<TemplateArgument> Args,
964+ bool MatchedPackOnParmToNonPackOnArg,
965+ ClassTemplateSpecializationDecl *PrevDecl)
967966 : CXXRecordDecl(DK, TK, Context, DC, StartLoc, IdLoc,
968967 SpecializedTemplate->getIdentifier (), PrevDecl),
969- SpecializedTemplate(SpecializedTemplate),
970- TemplateArgs(TemplateArgumentList::CreateCopy(Context, Args)),
971- SpecializationKind(TSK_Undeclared) {
968+ SpecializedTemplate(SpecializedTemplate),
969+ TemplateArgs(TemplateArgumentList::CreateCopy(Context, Args)),
970+ SpecializationKind(TSK_Undeclared),
971+ MatchedPackOnParmToNonPackOnArg(MatchedPackOnParmToNonPackOnArg) {
972+ assert (DK == Kind::ClassTemplateSpecialization ||
973+ MatchedPackOnParmToNonPackOnArg == false );
972974}
973975
974976ClassTemplateSpecializationDecl::ClassTemplateSpecializationDecl (ASTContext &C,
@@ -977,18 +979,14 @@ ClassTemplateSpecializationDecl::ClassTemplateSpecializationDecl(ASTContext &C,
977979 SourceLocation(), nullptr, nullptr),
978980 SpecializationKind(TSK_Undeclared) {}
979981
980- ClassTemplateSpecializationDecl *
981- ClassTemplateSpecializationDecl::Create (ASTContext &Context, TagKind TK,
982- DeclContext *DC,
983- SourceLocation StartLoc,
984- SourceLocation IdLoc,
985- ClassTemplateDecl *SpecializedTemplate,
986- ArrayRef<TemplateArgument> Args,
987- ClassTemplateSpecializationDecl *PrevDecl) {
988- auto *Result =
989- new (Context, DC) ClassTemplateSpecializationDecl (
990- Context, ClassTemplateSpecialization, TK, DC, StartLoc, IdLoc,
991- SpecializedTemplate, Args, PrevDecl);
982+ ClassTemplateSpecializationDecl *ClassTemplateSpecializationDecl::Create (
983+ ASTContext &Context, TagKind TK, DeclContext *DC, SourceLocation StartLoc,
984+ SourceLocation IdLoc, ClassTemplateDecl *SpecializedTemplate,
985+ ArrayRef<TemplateArgument> Args, bool MatchedPackOnParmToNonPackOnArg,
986+ ClassTemplateSpecializationDecl *PrevDecl) {
987+ auto *Result = new (Context, DC) ClassTemplateSpecializationDecl (
988+ Context, ClassTemplateSpecialization, TK, DC, StartLoc, IdLoc,
989+ SpecializedTemplate, Args, MatchedPackOnParmToNonPackOnArg, PrevDecl);
992990 Result->setMayHaveOutOfDateDef (false );
993991
994992 // If the template decl is incomplete, copy the external lexical storage from
@@ -1175,7 +1173,10 @@ ClassTemplatePartialSpecializationDecl::ClassTemplatePartialSpecializationDecl(
11751173 ClassTemplatePartialSpecializationDecl *PrevDecl)
11761174 : ClassTemplateSpecializationDecl(
11771175 Context, ClassTemplatePartialSpecialization, TK, DC, StartLoc, IdLoc,
1178- SpecializedTemplate, Args, PrevDecl),
1176+ // Tracking MatchedPackOnParmToNonPackOnArg for Partial
1177+ // Specializations is not needed.
1178+ SpecializedTemplate, Args, /* MatchedPackOnParmToNonPackOnArg=*/ false ,
1179+ PrevDecl),
11791180 TemplateParams(Params), InstantiatedFromMember(nullptr , false ) {
11801181 if (AdoptTemplateParameterList (Params, this ))
11811182 setInvalidDecl ();
0 commit comments