// semmle-extractor-options: --clang -std=c++20 namespace cpp20 { class TestConstexpr { constexpr int member_constexpr() { return 0; } // not const in C++ >= 14 constexpr int member_const_constexpr() const { return 0; } }; struct TestExplict { explicit TestExplict(); }; template struct TestExplicitBool { explicit(sizeof(T) == 1) TestExplicitBool(const T); }; explicit TestExplicitBool(const double) -> TestExplicitBool; template explicit(sizeof(T) == 4) TestExplicitBool(const T) -> TestExplicitBool; void TestExplicitBoolFun() { new TestExplicitBool(0); new TestExplicitBool(0); new TestExplicitBool(0.0f); new TestExplicitBool(0.0); } template struct TestExplicitBool2 { explicit(sizeof(T) == 1) TestExplicitBool2(const T); }; template TestExplicitBool2::TestExplicitBool2(const T) { } void TestExplicitBoolFun2() { new TestExplicitBool2(0); new TestExplicitBool2(0); } template struct TestExplicitBool3 { template explicit(sizeof(T) == 1) TestExplicitBool3(const T, const U); }; template template TestExplicitBool3::TestExplicitBool3(const T, const U) { } void TestExplicitBoolFun3() { new TestExplicitBool3(0, 0); new TestExplicitBool3(0, 0); } struct TestExplicitBool4 { explicit(sizeof(char) == 1) TestExplicitBool4(const char); }; } // namespace cpp20