diff options
| -rw-r--r-- | clang-tools-extra/clang-tidy/google/ExplicitConstructorCheck.cpp | 13 |
1 files changed, 7 insertions, 6 deletions
diff --git a/clang-tools-extra/clang-tidy/google/ExplicitConstructorCheck.cpp b/clang-tools-extra/clang-tidy/google/ExplicitConstructorCheck.cpp index 1d0ea68450c..df21d46ad58 100644 --- a/clang-tools-extra/clang-tidy/google/ExplicitConstructorCheck.cpp +++ b/clang-tools-extra/clang-tidy/google/ExplicitConstructorCheck.cpp @@ -24,8 +24,11 @@ void ExplicitConstructorCheck::registerMatchers(MatchFinder *Finder) { // provide any benefit to other languages, despite being benign. if (!getLangOpts().CPlusPlus) return; - Finder->addMatcher(cxxConstructorDecl(unless(isInstantiated())).bind("ctor"), - this); + Finder->addMatcher( + cxxConstructorDecl(unless(anyOf(isImplicit(), // Compiler-generated. + isDeleted(), isInstantiated()))) + .bind("ctor"), + this); Finder->addMatcher( cxxConversionDecl(unless(anyOf(isExplicit(), // Already marked explicit. isImplicit(), // Compiler-generated. @@ -99,10 +102,8 @@ void ExplicitConstructorCheck::check(const MatchFinder::MatchResult &Result) { } const auto *Ctor = Result.Nodes.getNodeAs<CXXConstructorDecl>("ctor"); - // Do not be confused: isExplicit means 'explicit' keyword is present, - // isImplicit means that it's a compiler-generated constructor. - if (Ctor->isOutOfLine() || Ctor->isImplicit() || Ctor->isDeleted() || - Ctor->getNumParams() == 0 || Ctor->getMinRequiredArguments() > 1) + if (Ctor->isOutOfLine() || Ctor->getNumParams() == 0 || + Ctor->getMinRequiredArguments() > 1) return; bool takesInitializerList = isStdInitializerList( |

