@@ -957,18 +957,20 @@ FunctionTemplateSpecializationInfo *FunctionTemplateSpecializationInfo::Create(
957
957
// ClassTemplateSpecializationDecl Implementation
958
958
// ===----------------------------------------------------------------------===//
959
959
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)
967
966
: CXXRecordDecl(DK, TK, Context, DC, StartLoc, IdLoc,
968
967
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 );
972
974
}
973
975
974
976
ClassTemplateSpecializationDecl::ClassTemplateSpecializationDecl (ASTContext &C,
@@ -977,18 +979,14 @@ ClassTemplateSpecializationDecl::ClassTemplateSpecializationDecl(ASTContext &C,
977
979
SourceLocation(), nullptr, nullptr),
978
980
SpecializationKind(TSK_Undeclared) {}
979
981
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);
992
990
Result->setMayHaveOutOfDateDef (false );
993
991
994
992
// If the template decl is incomplete, copy the external lexical storage from
@@ -1175,7 +1173,10 @@ ClassTemplatePartialSpecializationDecl::ClassTemplatePartialSpecializationDecl(
1175
1173
ClassTemplatePartialSpecializationDecl *PrevDecl)
1176
1174
: ClassTemplateSpecializationDecl(
1177
1175
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),
1179
1180
TemplateParams(Params), InstantiatedFromMember(nullptr , false ) {
1180
1181
if (AdoptTemplateParameterList (Params, this ))
1181
1182
setInvalidDecl ();
0 commit comments