boolean-testable
template< class B > concept __boolean_testable_impl = std::convertible_to<B, bool>; | (только для иллюстрации*) | |
template< class B >
concept boolean-testable =
__boolean_testable_impl<B> &&
requires (B&& b) {
{ !std::forward<B>(b) } -> __boolean_testable_impl;
};
| (только для иллюстрации*) |
Концепция «только для иллюстрации» 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*.
© cppreference.com
Licensed under the Creative Commons Attribution-ShareAlike Unported License v3.0.
https://en.cppreference.com/w/cpp/concepts/boolean-testable