boolean-testable - cppreference.com

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

short-circuiting

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

argument-dependent lookup

. 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

requires expressions

of the standard library concepts are required to be

equality-preserving

(except where stated otherwise).

Notes

Examples of boolean-testable types include bool,

std::true_type

, std::bitset<N>::

reference

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