[PATCH] D117593: [clang-tidy] Change google-explicit-constructor to ignore conversions and operators marked `explicit(false)`

Nathan James via Phabricator via cfe-commits cfe-commits at lists.llvm.org
Wed Jan 26 18:20:38 PST 2022


njames93 added a comment.

In D117593#3273562 <https://reviews.llvm.org/D117593#3273562>, @aaron.ballman wrote:

> Hmmm, this is a rule for checking a specific style guide. https://google.github.io/styleguide/cppguide.html#Implicit_Conversions doesn't say that `explicit(false)` is a reasonable marking. In fact, it says "Implicit conversions can sometimes be necessary and appropriate for types that are designed to be interchangeable, for example when objects of two types are just different representations of the same underlying value. In that case, contact your project leads to request a waiver of this rule."
>
> So I think this behavior needs to be behind a flag so that the default behavior continues to match what the style guide requires (or the style guide should be updated to clarify the behavior of `explicit(false)`).

My understanding of the rule(as a non Googler) was that `explicit(false)` is an effective way to disable the rule by explicitly declaring the constructor to be implicit. Which is much cleaner than throwing `NOLINT` markers about.
In any case this c++20 syntax is not supported as the current fixit produces invalid code, as evidenced in the initial bug report.


Repository:
  rG LLVM Github Monorepo

CHANGES SINCE LAST ACTION
  https://reviews.llvm.org/D117593/new/

https://reviews.llvm.org/D117593



More information about the cfe-commits mailing list