From cppreference.com
template<classB>concept__boolean_testable_impl=std::convertible_to<B,bool>; (1)(since C++20)
(exposition only*)template<classB>conceptboolean-testable=__boolean_testable_impl<B>&&requires(B&&b){{!std::forward<B>(b)}->__boolean_testable_impl;}; (2)(since C++20)
(exposition only*)The exposition-only concept boolean-testable specifies the requirements for expressions that are convertible to bool and for which the logical operators have the usual behavior (including
), even for two different boolean-testable types.
Formally, to model the exposition-only concept __boolean_testable_impl, the type must not define any member operator&& and operator||, and no viable non-member operator&& and operator|| may be visible by
. Additionally, given an expression e such that decltype((e)) is B, boolean-testable is modeled only if bool(e)==!bool(!e).
Equality preservation
Expressions declared in
of the standard library concepts are required to be
(except where stated otherwise).
Notes
Examples of boolean-testable types include bool,
, std::bitset<N>::
, and int*.
References
C++23 standard (ISO/IEC 14882:2024):
18.5.2 Boolean testability [concept.booleantestable]
C++20 standard (ISO/IEC 14882:2020):
18.5.2 Boolean testability [concept.booleantestable]