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 | |