================
@@ -12479,28 +12488,27 @@ static void DiagnoseBadDeduction(Sema &S, NamedDecl
*Found, Decl *Templated,
return;
}
- case TemplateDeductionResult::InvalidExplicitArguments:
+ case TemplateDeductionResult::InvalidExplicitArguments: {
assert(ParamD && "no parameter found for invalid explicit arguments");
+
+ auto Diag = S.Diag(Templated->getLocation(),
+ diag::note_ovl_candidate_explicit_arg_mismatch);
if (ParamD->getDeclName())
- S.Diag(Templated->getLocation(),
- diag::note_ovl_candidate_explicit_arg_mismatch_named)
- << ParamD->getDeclName();
- else {
- int index = 0;
- if (TemplateTypeParmDecl *TTP = dyn_cast<TemplateTypeParmDecl>(ParamD))
- index = TTP->getIndex();
- else if (NonTypeTemplateParmDecl *NTTP
- = dyn_cast<NonTypeTemplateParmDecl>(ParamD))
- index = NTTP->getIndex();
- else
- index = cast<TemplateTemplateParmDecl>(ParamD)->getIndex();
- S.Diag(Templated->getLocation(),
- diag::note_ovl_candidate_explicit_arg_mismatch_unnamed)
- << (index + 1);
+ Diag << diag::ExplicitArgMismatchNameKind::Named <<
ParamD->getDeclName();
+ else
+ Diag << diag::ExplicitArgMismatchNameKind::Unnamed
+ << (getDepthAndIndex(ParamD).second + 1);
+ if (PartialDiagnosticAt *PDiag = DeductionFailure.getSFINAEDiagnostic()) {
+ SmallString<128> DiagContent;
+ PDiag->second.EmitToString(S.getDiagnostics(), DiagContent);
+ Diag << diag::ExplicitArgMismatchReasonKind::Detailed << DiagContent;
+ } else {
+ Diag << diag::ExplicitArgMismatchReasonKind::Vague;
----------------
zyn0217 wrote:
No... Honestly I'm not sure if it's dead. But we do have similar fallbacks in
TemplateDeductionResult::SubstitutionFailure and we wouldn't print out any
details either, if PDiag is null.
https://github.com/llvm/llvm-project/pull/139066
_______________________________________________
cfe-commits mailing list
[email protected]
https://lists.llvm.org/cgi-bin/mailman/listinfo/cfe-commits