forked from OSchip/llvm-project
[clang] Fix the bogus diagnostic introduced by the newly-added UsingTemplate Kind.
Reviewed By: sammccall Differential Revision: https://reviews.llvm.org/D123808
This commit is contained in:
parent
8e44f13c6d
commit
4f8d92f1d6
|
@ -11056,6 +11056,7 @@ void Sema::CheckDeductionGuideDeclarator(Declarator &D, QualType &R,
|
|||
|
||||
// Check that the return type is written as a specialization of
|
||||
// the template specified as the deduction-guide's name.
|
||||
// The template name may not be qualified. [temp.deduct.guide]
|
||||
ParsedType TrailingReturnType = Chunk.Fun.getTrailingReturnType();
|
||||
TypeSourceInfo *TSI = nullptr;
|
||||
QualType RetTy = GetTypeFromParser(TrailingReturnType, &TSI);
|
||||
|
@ -11067,9 +11068,13 @@ void Sema::CheckDeductionGuideDeclarator(Declarator &D, QualType &R,
|
|||
TemplateName SpecifiedName = RetTST.getTypePtr()->getTemplateName();
|
||||
bool TemplateMatches =
|
||||
Context.hasSameTemplateName(SpecifiedName, GuidedTemplate);
|
||||
// FIXME: We should consider other template kinds (using, qualified),
|
||||
// otherwise we will emit bogus diagnostics.
|
||||
if (SpecifiedName.getKind() == TemplateName::Template && TemplateMatches)
|
||||
auto TKind = SpecifiedName.getKind();
|
||||
// A Using TemplateName can't actually be valid (either it's qualified, or
|
||||
// we're in the wrong scope). But we have diagnosed these problems
|
||||
// already.
|
||||
bool SimplyWritten = TKind == TemplateName::Template ||
|
||||
TKind == TemplateName::UsingTemplate;
|
||||
if (SimplyWritten && TemplateMatches)
|
||||
AcceptableReturnType = true;
|
||||
else {
|
||||
// This could still instantiate to the right type, unless we know it
|
||||
|
|
|
@ -55,8 +55,6 @@ namespace WrongScope {
|
|||
}
|
||||
using N::NamedNS1;
|
||||
NamedNS1(int) -> NamedNS1<int>; // expected-error {{deduction guide must be declared in the same scope as template}}
|
||||
// FIXME: remove the following bogus diagnostic
|
||||
// expected-error@-2{{deduction guide is not written as a specialization of template 'NamedNS1'}}
|
||||
|
||||
using namespace N;
|
||||
NamedNS2(int) -> NamedNS2<int>; // expected-error {{deduction guide must be declared in the same scope as template}}
|
||||
|
|
Loading…
Reference in New Issue