проверяемый на логическое значение
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