diff --git a/clang/lib/Sema/SemaTemplateDeduction.cpp b/clang/lib/Sema/SemaTemplateDeduction.cpp index 3aa808e165bb6..477f8c7541939 100644 --- a/clang/lib/Sema/SemaTemplateDeduction.cpp +++ b/clang/lib/Sema/SemaTemplateDeduction.cpp @@ -2911,11 +2911,7 @@ Sema::getTrivialTemplateArgumentLoc(const TemplateArgument &Arg, case TemplateArgument::TemplateExpansion: { NestedNameSpecifierLocBuilder Builder; TemplateName Template = Arg.getAsTemplateOrTemplatePattern(); - if (DependentTemplateName *DTN = Template.getAsDependentTemplateName()) - Builder.MakeTrivial(Context, DTN->getQualifier(), Loc); - else if (QualifiedTemplateName *QTN = - Template.getAsQualifiedTemplateName()) - Builder.MakeTrivial(Context, QTN->getQualifier(), Loc); + Builder.MakeTrivial(Context, Template.getQualifier(), Loc); return TemplateArgumentLoc( Context, Arg, Loc, Builder.getWithLocInContext(Context), Loc, /*EllipsisLoc=*/Arg.getKind() == TemplateArgument::TemplateExpansion diff --git a/clang/test/SemaTemplate/ctad.cpp b/clang/test/SemaTemplate/ctad.cpp index 49c46150d964c..1a575ea527006 100644 --- a/clang/test/SemaTemplate/ctad.cpp +++ b/clang/test/SemaTemplate/ctad.cpp @@ -90,3 +90,17 @@ namespace AsValueParameter { // cxx17-error@-1 {{value of type 'foo::A' is not implicitly convertible to 'int'}} // cxx20-error@-2 {{non-type template parameter has non-literal type 'foo::A' (aka 'AsValueParameter::foo::A')}} } // namespace AsValueParameter + +namespace ConvertDeducedTemplateArgument { + namespace A { + template struct B {}; + } + + template