*boolean-testable*

template< class B > concept __boolean_testable_impl = std::convertible_to<B, bool>; |
(exposition only*) | |

template< class B > concept boolean-testable = |
(exposition only*) | |

The exposition-only concept

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.
*boolean-testable*

Formally, to model the exposition-only concept

, the type must not define any member *__boolean_testable_impl*`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`

,

is modeled only if bool(e) == !bool(!e).
*boolean-testable*

### [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

types include bool, std::true_type, std::bitset<N>::reference, and int*.
*boolean-testable*