@@ -1466,6 +1466,18 @@ namespace {
14661466 }
14671467 }
14681468
1469+ static TemplateArgument
1470+ getTemplateArgumentPackPatternForRewrite (const TemplateArgument &TA) {
1471+ if (TA.getKind () != TemplateArgument::Pack)
1472+ return TA;
1473+ assert (TA.pack_size () == 1 &&
1474+ " unexpected pack arguments in template rewrite" );
1475+ TemplateArgument Arg = *TA.pack_begin ();
1476+ if (Arg.isPackExpansion ())
1477+ Arg = Arg.getPackExpansionPattern ();
1478+ return Arg;
1479+ }
1480+
14691481 // / Transform the given declaration by instantiating a reference to
14701482 // / this declaration.
14711483 Decl *TransformDecl (SourceLocation Loc, Decl *D);
@@ -2040,13 +2052,7 @@ TemplateName TemplateInstantiator::TransformTemplateName(
20402052 if (TemplateArgs.isRewrite ()) {
20412053 // We're rewriting the template parameter as a reference to another
20422054 // template parameter.
2043- if (Arg.getKind () == TemplateArgument::Pack) {
2044- assert (Arg.pack_size () == 1 &&
2045- " unexpected pack arguments in template rewrite" );
2046- Arg = *Arg.pack_begin ();
2047- if (Arg.isPackExpansion ())
2048- Arg = Arg.getPackExpansionPattern ();
2049- }
2055+ Arg = getTemplateArgumentPackPatternForRewrite (Arg);
20502056 assert (Arg.getKind () == TemplateArgument::Template &&
20512057 " unexpected nontype template argument kind in template rewrite" );
20522058 return Arg.getAsTemplate ();
@@ -2127,13 +2133,7 @@ TemplateInstantiator::TransformTemplateParmRefExpr(DeclRefExpr *E,
21272133 if (TemplateArgs.isRewrite ()) {
21282134 // We're rewriting the template parameter as a reference to another
21292135 // template parameter.
2130- if (Arg.getKind () == TemplateArgument::Pack) {
2131- assert (Arg.pack_size () == 1 &&
2132- " unexpected pack arguments in template rewrite" );
2133- Arg = *Arg.pack_begin ();
2134- if (Arg.isPackExpansion ())
2135- Arg = Arg.getPackExpansionPattern ();
2136- }
2136+ Arg = getTemplateArgumentPackPatternForRewrite (Arg);
21372137 assert (Arg.getKind () == TemplateArgument::Expression &&
21382138 " unexpected nontype template argument kind in template rewrite" );
21392139 // FIXME: This can lead to the same subexpression appearing multiple times
@@ -2595,13 +2595,7 @@ TemplateInstantiator::TransformTemplateTypeParmType(TypeLocBuilder &TLB,
25952595 if (TemplateArgs.isRewrite ()) {
25962596 // We're rewriting the template parameter as a reference to another
25972597 // template parameter.
2598- if (Arg.getKind () == TemplateArgument::Pack) {
2599- assert (Arg.pack_size () == 1 &&
2600- " unexpected pack arguments in template rewrite" );
2601- Arg = *Arg.pack_begin ();
2602- if (Arg.isPackExpansion ())
2603- Arg = Arg.getPackExpansionPattern ();
2604- }
2598+ Arg = getTemplateArgumentPackPatternForRewrite (Arg);
26052599 assert (Arg.getKind () == TemplateArgument::Type &&
26062600 " unexpected nontype template argument kind in template rewrite" );
26072601 QualType NewT = Arg.getAsType ();
0 commit comments