@@ -1720,17 +1720,14 @@ namespace {
17201720 QualType
17211721 TransformSubstTemplateTypeParmType (TypeLocBuilder &TLB,
17221722 SubstTemplateTypeParmTypeLoc TL) {
1723- const SubstTemplateTypeParmType *Type = TL.getTypePtr ();
1724- if (Type->getSubstitutionFlag () !=
1725- SubstTemplateTypeParmTypeFlag::ExpandPacksInPlace)
1723+ if (SemaRef.CodeSynthesisContexts .back ().Kind !=
1724+ Sema::CodeSynthesisContext::ConstraintSubstitution)
17261725 return inherited::TransformSubstTemplateTypeParmType (TLB, TL);
17271726
1728- assert (Type->getPackIndex ());
1729- TemplateArgument TA = TemplateArgs (
1730- Type->getReplacedParameter ()->getDepth (), Type->getIndex ());
1731- assert (*Type->getPackIndex () + 1 <= TA.pack_size ());
1732- Sema::ArgumentPackSubstitutionIndexRAII SubstIndex (
1733- SemaRef, TA.pack_size () - 1 - *Type->getPackIndex ());
1727+ auto PackIndex = TL.getTypePtr ()->getPackIndex ();
1728+ std::optional<Sema::ArgumentPackSubstitutionIndexRAII> SubstIndex;
1729+ if (SemaRef.ArgumentPackSubstitutionIndex == -1 && PackIndex)
1730+ SubstIndex.emplace (SemaRef, *PackIndex);
17341731
17351732 return inherited::TransformSubstTemplateTypeParmType (TLB, TL);
17361733 }
@@ -3176,11 +3173,7 @@ struct ExpandPackedTypeConstraints
31763173
31773174 using inherited = TreeTransform<ExpandPackedTypeConstraints>;
31783175
3179- const MultiLevelTemplateArgumentList &TemplateArgs;
3180-
3181- ExpandPackedTypeConstraints (
3182- Sema &SemaRef, const MultiLevelTemplateArgumentList &TemplateArgs)
3183- : inherited(SemaRef), TemplateArgs(TemplateArgs) {}
3176+ ExpandPackedTypeConstraints (Sema &SemaRef) : inherited(SemaRef) {}
31843177
31853178 using inherited::TransformTemplateTypeParmType;
31863179
@@ -3196,15 +3189,9 @@ struct ExpandPackedTypeConstraints
31963189
31973190 assert (SemaRef.ArgumentPackSubstitutionIndex != -1 );
31983191
3199- TemplateArgument Arg = TemplateArgs (T->getDepth (), T->getIndex ());
3200-
3201- std::optional<unsigned > PackIndex;
3202- if (Arg.getKind () == TemplateArgument::Pack)
3203- PackIndex = Arg.pack_size () - 1 - SemaRef.ArgumentPackSubstitutionIndex ;
3204-
32053192 QualType Result = SemaRef.Context .getSubstTemplateTypeParmType (
3206- TL.getType (), T->getDecl (), T->getIndex (), PackIndex,
3207- SubstTemplateTypeParmTypeFlag::ExpandPacksInPlace );
3193+ TL.getType (), T->getDecl (), T->getIndex (),
3194+ SemaRef. ArgumentPackSubstitutionIndex );
32083195 SubstTemplateTypeParmTypeLoc NewTL =
32093196 TLB.push <SubstTemplateTypeParmTypeLoc>(Result);
32103197 NewTL.setNameLoc (TL.getNameLoc ());
@@ -3263,8 +3250,8 @@ bool Sema::SubstTypeConstraint(
32633250 TemplateArgumentListInfo InstArgs;
32643251 InstArgs.setLAngleLoc (TemplArgInfo->LAngleLoc );
32653252 InstArgs.setRAngleLoc (TemplArgInfo->RAngleLoc );
3266- if (ExpandPackedTypeConstraints (*this , TemplateArgs)
3267- . SubstTemplateArguments ( TemplArgInfo->arguments (), InstArgs))
3253+ if (ExpandPackedTypeConstraints (*this ). SubstTemplateArguments (
3254+ TemplArgInfo->arguments (), InstArgs))
32683255 return true ;
32693256
32703257 // The type of the original parameter.
0 commit comments