@@ -565,7 +565,7 @@ std::optional<MultiLevelTemplateArgumentList>
565565ConstraintSatisfactionChecker::SubstitutionInTemplateArguments (
566566 const NormalizedConstraintWithParamMapping &Constraint,
567567 MultiLevelTemplateArgumentList MLTAL,
568- llvm::SmallVector<TemplateArgument> &SubstitutedOuterMost ) {
568+ llvm::SmallVector<TemplateArgument> &SubstitutedOutermost ) {
569569
570570 if (!Constraint.hasParameterMapping ())
571571 return std::move (MLTAL);
@@ -606,38 +606,39 @@ ConstraintSatisfactionChecker::SubstitutionInTemplateArguments(
606606 Constraint.mappingOccurenceList ();
607607 // The empty MLTAL situation should only occur when evaluating non-dependent
608608 // constraints.
609- if (!MLTAL.getNumSubstitutedLevels ())
610- MLTAL.addOuterTemplateArguments (TD, {}, /* Final=*/ false );
611- SubstitutedOuterMost =
612- llvm::to_vector_of<TemplateArgument>(MLTAL.getOutermost ());
609+ if (MLTAL.getNumSubstitutedLevels ())
610+ SubstitutedOutermost =
611+ llvm::to_vector_of<TemplateArgument>(MLTAL.getOutermost ());
613612 unsigned Offset = 0 ;
614613 for (unsigned I = 0 , MappedIndex = 0 ; I < Used.size (); I++) {
615614 TemplateArgument Arg;
616615 if (Used[I])
617616 Arg = S.Context .getCanonicalTemplateArgument (
618617 CTAI.SugaredConverted [MappedIndex++]);
619- if (I < SubstitutedOuterMost .size ()) {
620- SubstitutedOuterMost [I] = Arg;
618+ if (I < SubstitutedOutermost .size ()) {
619+ SubstitutedOutermost [I] = Arg;
621620 Offset = I + 1 ;
622621 } else {
623- SubstitutedOuterMost .push_back (Arg);
624- Offset = SubstitutedOuterMost .size ();
622+ SubstitutedOutermost .push_back (Arg);
623+ Offset = SubstitutedOutermost .size ();
625624 }
626625 }
627- if (Offset < SubstitutedOuterMost .size ())
628- SubstitutedOuterMost .erase (SubstitutedOuterMost .begin () + Offset);
626+ if (Offset < SubstitutedOutermost .size ())
627+ SubstitutedOutermost .erase (SubstitutedOutermost .begin () + Offset);
629628
630- MLTAL.replaceOutermostTemplateArguments (TD, SubstitutedOuterMost);
631- return std::move (MLTAL);
629+ MultiLevelTemplateArgumentList SubstitutedTemplateArgs;
630+ SubstitutedTemplateArgs.addOuterTemplateArguments (TD, SubstitutedOutermost,
631+ /* Final=*/ false );
632+ return std::move (SubstitutedTemplateArgs);
632633}
633634
634635ExprResult ConstraintSatisfactionChecker::EvaluateSlow (
635636 const AtomicConstraint &Constraint,
636637 const MultiLevelTemplateArgumentList &MLTAL) {
637638
638- llvm::SmallVector<TemplateArgument> SubstitutedOuterMost ;
639+ llvm::SmallVector<TemplateArgument> SubstitutedOutermost ;
639640 std::optional<MultiLevelTemplateArgumentList> SubstitutedArgs =
640- SubstitutionInTemplateArguments (Constraint, MLTAL, SubstitutedOuterMost );
641+ SubstitutionInTemplateArguments (Constraint, MLTAL, SubstitutedOutermost );
641642 if (!SubstitutedArgs) {
642643 Satisfaction.IsSatisfied = false ;
643644 return ExprEmpty ();
@@ -785,13 +786,13 @@ ExprResult ConstraintSatisfactionChecker::EvaluateSlow(
785786 FoldExpandedConstraint::FoldOperatorKind::And;
786787 unsigned EffectiveDetailEndIndex = Satisfaction.Details .size ();
787788
788- llvm::SmallVector<TemplateArgument> SubstitutedOuterMost ;
789+ llvm::SmallVector<TemplateArgument> SubstitutedOutermost ;
789790 // FIXME: Is PackSubstitutionIndex correct?
790791 llvm::SaveAndRestore _ (PackSubstitutionIndex, S.ArgPackSubstIndex );
791792 std::optional<MultiLevelTemplateArgumentList> SubstitutedArgs =
792793 SubstitutionInTemplateArguments (
793794 static_cast <const NormalizedConstraintWithParamMapping &>(Constraint),
794- MLTAL, SubstitutedOuterMost );
795+ MLTAL, SubstitutedOutermost );
795796 if (!SubstitutedArgs) {
796797 Satisfaction.IsSatisfied = false ;
797798 return ExprError ();
@@ -879,9 +880,9 @@ ExprResult ConstraintSatisfactionChecker::EvaluateSlow(
879880 const MultiLevelTemplateArgumentList &MLTAL, unsigned Size) {
880881 const ConceptReference *ConceptId = Constraint.getConceptId ();
881882
882- llvm::SmallVector<TemplateArgument> SubstitutedOuterMost ;
883+ llvm::SmallVector<TemplateArgument> SubstitutedOutermost ;
883884 std::optional<MultiLevelTemplateArgumentList> SubstitutedArgs =
884- SubstitutionInTemplateArguments (Constraint, MLTAL, SubstitutedOuterMost );
885+ SubstitutionInTemplateArguments (Constraint, MLTAL, SubstitutedOutermost );
885886
886887 if (!SubstitutedArgs) {
887888 Satisfaction.IsSatisfied = false ;
0 commit comments