mgartmann added inline comments.
================
Comment at:
clang-tools-extra/clang-tidy/google/ExplicitConstructorCheck.cpp:28-30
+ std::string FullOperatorName =
+ Node.getParent()->getNameAsString().append("::").append(
+ Node.getNameAsString());
----------------
aaron.ballman wrote:
> Rather than trying to do this by hand, does `Decl::print()` give you the
> functionality you need? For example, this will likely not work well for
> classes defined within a namespace (it may ignore the wrong class due to not
> checking the namespace). Another thing to consider are templates and how to
> handle those. e.g.,
> ```
> struct Foo {
> template <typename Ty>
> operator Ty() const; // How to silence the diagnostic here?
> };
> ```
> Thankfully, specializations can't differ in their explicitness, so you don't
> have to also worry about:
> ```
> struct Foo {
> template <typename Ty>
> explicit operator Ty() const; // This one's explicit
> };
>
> template <>
> Foo::operator int() const; // Thankfully, this inherits the explicit from the
> primary template.
> ```
Thanks for your comment, @aaron.ballman!
I was able to use `printQualifiedName` to get a `Node`'s qualified name,
including its namespace.
Templated operators are not represented by their name visible in the source
code (e.g., `Ty`) in the AST. Instead, their name in the AST is something like
`type-parameter-0-0`. As it is now, templated operators have to be ignored with
the latter name, which is also displayed in the check's diagnostic message.
This was described in the documentation accordingly.
I was not able to find a feasible way to enable users to exclude templated
operators by their original name (e.g., `Ty`). Does anyone have an idea how
this could be done?
Repository:
rG LLVM Github Monorepo
CHANGES SINCE LAST ACTION
https://reviews.llvm.org/D102779/new/
https://reviews.llvm.org/D102779
_______________________________________________
cfe-commits mailing list
[email protected]
https://lists.llvm.org/cgi-bin/mailman/listinfo/cfe-commits