xref: /llvm-project/clang-tools-extra/test/clang-tidy/checkers/google/explicit-constructor-cxx20.cpp (revision eb3b063995d6b4f8f3bc22eeecbf239ffaecc29f)
1 // RUN: %check_clang_tidy %s google-explicit-constructor %t -std=c++20-or-later
2 
3 namespace issue_81121
4 {
5 
6 static constexpr bool ConstFalse = false;
7 static constexpr bool ConstTrue = true;
8 
9 struct A {
10   explicit(true) A(int);
11 };
12 
13 struct B {
14   explicit(false) B(int);
15 };
16 
17 struct C {
18   explicit(ConstTrue) C(int);
19 };
20 
21 struct D {
22   explicit(ConstFalse) D(int);
23   // CHECK-MESSAGES: :[[@LINE-1]]:24: warning: single-argument constructors explicit expression evaluates to 'false' [google-explicit-constructor]
24 };
25 
26 template <typename>
27 struct E {
28   explicit(true) E(int);
29 };
30 
31 template <typename>
32 struct F {
33   explicit(false) F(int);
34 };
35 
36 template <typename>
37 struct G {
38   explicit(ConstTrue) G(int);
39 };
40 
41 template <typename>
42 struct H {
43   explicit(ConstFalse) H(int);
44   // CHECK-MESSAGES: :[[@LINE-1]]:24: warning: single-argument constructors explicit expression evaluates to 'false' [google-explicit-constructor]
45 };
46 
47 template <int Val>
48 struct I {
49   explicit(Val > 0) I(int);
50 };
51 
52 template <int Val>
53 struct J {
54   explicit(Val > 0) J(int);
55 };
56 
57 void useJ(J<0>, J<100>);
58 
59 } // namespace issue_81121
60