Namespaces
Variants

boolean-testable

From cppreference.net
template < class B >
concept __boolean_testable_impl = std:: convertible_to < B, bool > ;
(1) (начиная с C++20)
( только для демонстрации* )
template < class B >

concept boolean - testable =
__boolean_testable_impl < B > &&
requires ( B && b ) {
{ ! std:: forward < B > ( b ) } - > __boolean_testable_impl ;

} ;
(2) (начиная с C++20)
( только для демонстрации* )

Экспозиционное понятие boolean-testable определяет требования для выражений, которые конвертируются в bool и для которых логические операторы имеют стандартное поведение (включая сокращённое вычисление ), даже для двух различных типов boolean-testable .

Формально, для моделирования исключительно экспозиционного концепта __boolean_testable_impl тип не должен определять никакие члены operator && и operator || , и никакие подходящие нечленные operator && и operator || не должны быть видны через поиск, зависимый от аргументов . Кроме того, для выражения e такого, что decltype ( ( e ) ) является B , boolean-testable моделируется только если bool ( e ) == ! bool ( ! e ) .

Сохранение равенства

Выражения, объявленные в requires выражениях концепций стандартной библиотеки, должны быть equality-preserving (если не указано иное).

Примечания

Примеры типов, удовлетворяющих boolean-testable , включают bool , std::true_type , std:: bitset < N > :: reference , и int * .

Ссылки

  • Стандарт C++23 (ISO/IEC 14882:2024):
  • 18.5.2 Проверяемость на логическое значение [concept.booleantestable]
  • Стандарт C++20 (ISO/IEC 14882:2020):
  • 18.5.2 Проверяемость на истинность [concept.booleantestable]