================
@@ -130,18 +134,30 @@ void ExplicitConstructorCheck::check(const 
MatchFinder::MatchResult &Result) {
     return;
   }
 
-  if (Ctor->isExplicit() || Ctor->isCopyOrMoveConstructor() ||
+  if (ExplicitSpec.isExplicit() || Ctor->isCopyOrMoveConstructor() ||
       TakesInitializerList)
     return;
 
+  // Don't complain about explicit(false)
+  const Expr *ExplicitExpr = ExplicitSpec.getExpr();
+  if (ExplicitExpr) {
+    ExplicitExpr = ExplicitExpr->IgnoreImplicit();
+    if (isa<CXXBoolLiteralExpr>(ExplicitExpr))
+      return;
+  }
+
----------------
5chmidti wrote:

I think that dependent expressions (`isInstantiationDependent`) should also be 
ignored, e.g.

```c++
template <int Val>
struct I {
  explicit(Val > 0) I(int);
};

template <int Val>
struct J {
  explicit(Val > 0) J(int);
};

void useJ(J<0>, J<100>);
```
should not produce any warnings IMO.

https://github.com/llvm/llvm-project/pull/82689
_______________________________________________
cfe-commits mailing list
cfe-commits@lists.llvm.org
https://lists.llvm.org/cgi-bin/mailman/listinfo/cfe-commits

Reply via email to