boolean-testable - cppreference.com (original) (raw)

template< class B >concept __boolean_testable_impl = std::convertible_to<B, bool>; (1) (since C++20) (exposition only*)
template< class B > concept boolean-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 __booleantestableimpl_, 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).

[edit] Equality preservation

Expressions declared in requires expressions of the standard library concepts are required to be equality-preserving (except where stated otherwise).

[edit] Notes

Examples of _boolean-testable_ types include bool, std::true_type, std::bitset<N>::reference, and int*.

[edit] References