boolean-testable

From cppreference.com
< cpp‎ | concepts
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

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

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]