| // PR c++/100065 | |
| // { dg-do compile { target c++20 } } | |
| template<bool B> | |
| struct bool_constant { | |
| static constexpr bool value = B; | |
| constexpr operator bool() const { return value; } | |
| }; | |
| using true_type = bool_constant<true>; | |
| using false_type = bool_constant<false>; | |
| template<bool> | |
| struct X { | |
| template<typename T> | |
| X(T); | |
| }; | |
| template<bool b> | |
| explicit(b) X(bool_constant<b>) -> X<b>; | |
| X false_ = false_type{}; // OK | |
| X true_ = true_type{}; // { dg-error "explicit deduction guide" } |