[clang] [Clang] Clarify diagnostic notes for implicitly generated deduction guides (PR #96084)
Haojian Wu via cfe-commits
cfe-commits at lists.llvm.org
Fri Jun 21 00:53:59 PDT 2024
hokein wrote:
Thanks for the patch! +1 on the idea of printing deduction guides in diagnostics. This improves the experience for both users and compiler developers. This is https://github.com/llvm/llvm-project/issues/92393 :)
> Perhaps an approach more similar to what we display for ambiguous cast paths would be better, i.e., listing each implicit deduction guide we tried in a single note.
>
> Thanks for suggesting a better approach. However, implementing this would require significant changes to our diagnostic logic for overloads. We currently explain the reasons for deduction failure in subsequent notes, with around 16 different kinds of deduction failures, each with its own diagnostic message. Given this complexity, I don't think it's necessary (or feasible) to special-case CTAD guides for each note.
In my opinion, including the deduction guide in the existing note (e.g., `candidate template "template<class T> S()-> S<T>" ignored: ...`) is clearer and more concise. It seems that the current implementation in clang assumes all template candidates are written in the source code, which isn't true for the CTAD case. We could extend it to work for not-explicitly-written-in-source-code case.
Although we have 19 `candidate template ignored` notes, they are mostly localized in `SemaOverload.cpp`. Extending them is possible but would require some work.
However, I don't feel strongly about this, and am also fine with the current implementation, as it has already improved the experience.
https://github.com/llvm/llvm-project/pull/96084
More information about the cfe-commits
mailing list