@@ -11451,23 +11451,29 @@ bool Sema::CheckDeductionGuideDeclarator(Declarator &D, QualType &R,
1145111451 bool MightInstantiateToSpecialization = false;
1145211452 if (auto RetTST =
1145311453 TSI->getTypeLoc().getAsAdjusted<TemplateSpecializationTypeLoc>()) {
11454- TemplateName SpecifiedName = RetTST.getTypePtr()->getTemplateName();
11455- bool TemplateMatches = Context.hasSameTemplateName(
11456- SpecifiedName, GuidedTemplate, /*IgnoreDeduced=*/true);
11457-
11458- const QualifiedTemplateName *Qualifiers =
11459- SpecifiedName.getAsQualifiedTemplateName();
11460- assert(Qualifiers && "expected QualifiedTemplate");
11461- bool SimplyWritten = !Qualifiers->hasTemplateKeyword() &&
11462- Qualifiers->getQualifier() == nullptr;
11463- if (SimplyWritten && TemplateMatches)
11464- AcceptableReturnType = true;
11465- else {
11466- // This could still instantiate to the right type, unless we know it
11467- // names the wrong class template.
11468- auto *TD = SpecifiedName.getAsTemplateDecl();
11469- MightInstantiateToSpecialization = !(TD && isa<ClassTemplateDecl>(TD) &&
11470- !TemplateMatches);
11454+ const TemplateSpecializationType *TST = RetTST.getTypePtr();
11455+ while (TST && TST->isTypeAlias())
11456+ TST = TST->getAliasedType()->getAs<TemplateSpecializationType>();
11457+
11458+ if (TST) {
11459+ TemplateName SpecifiedName = TST->getTemplateName();
11460+ bool TemplateMatches = Context.hasSameTemplateName(
11461+ SpecifiedName, GuidedTemplate, /*IgnoreDeduced=*/true);
11462+
11463+ const QualifiedTemplateName *Qualifiers =
11464+ SpecifiedName.getAsQualifiedTemplateName();
11465+ assert(Qualifiers && "expected QualifiedTemplate");
11466+ bool SimplyWritten = !Qualifiers->hasTemplateKeyword() &&
11467+ Qualifiers->getQualifier() == nullptr;
11468+ if (SimplyWritten && TemplateMatches)
11469+ AcceptableReturnType = true;
11470+ else {
11471+ // This could still instantiate to the right type, unless we know it
11472+ // names the wrong class template.
11473+ auto *TD = SpecifiedName.getAsTemplateDecl();
11474+ MightInstantiateToSpecialization =
11475+ !(TD && isa<ClassTemplateDecl>(TD) && !TemplateMatches);
11476+ }
1147111477 }
1147211478 } else if (!RetTy.hasQualifiers() && RetTy->isDependentType()) {
1147311479 MightInstantiateToSpecialization = true;
0 commit comments