Spec-Zone.ru › C++

проверяемый на логическое значение

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-выражениях понятий стандартной библиотеки, должны сохранять равенство (если не указано иное).

Примечания

К типам 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]

© cppreference.com
Licensed under the Creative Commons Attribution-ShareAlike Unported License v3.0.
https://en.cppreference.com/cpp/concepts/boolean-testable

Spec-Zone.ru

Настройки Оффлайн Что нового Помощь О нас
Spec-Zone .ru
спецификации, руководства, описания, API