std::experimental::ranges:: Boolean
|
Определено в заголовке
<experimental/ranges/concepts>
|
||
|
template
<
class
B
>
concept
bool
Boolean
=
|
(ranges TS) | |
Концепт
Boolean<B>
определяет требования к типу, пригодному для использования в булевых контекстах. Для удовлетворения
Boolean
логические операторы должны обладать стандартным поведением (включая сокращённое вычисление). Более точно, при заданных
-
b1,b2, два lvalue типа const std:: remove_reference_t < B > ,
Boolean<B>
удовлетворяется только если:
- bool ( b1 ) == ! bool ( ! b1 ) ;
- b1 && b2 , b1 && bool ( b2 ) и bool ( b1 ) && b2 все равны bool ( b1 ) && bool ( b2 ) и имеют одинаковое сокращённое вычисление;
- b1 || b2 , b1 || bool ( b2 ) и bool ( b1 ) || b2 все равны bool ( b1 ) || bool ( b2 ) и имеют одинаковое сокращённое вычисление;
- bool ( b1 == b2 ) , bool ( b1 == bool ( b2 ) ) и bool ( bool ( b1 ) == b2 ) все равны ( bool ( b1 ) == bool ( b2 ) ) ;
- bool ( b1 ! = b2 ) , bool ( b1 ! = bool ( b2 ) ) и bool ( bool ( b1 ) ! = b2 ) все равны ( bool ( b1 ) ! = bool ( b2 ) ) .
Сохранение равенства
Выражение называется сохраняющим равенство если оно даёт равные результаты при равных входных данных.
- Входные данные выражения состоят из его операндов.
- Выходные данные выражения состоят из его результата и всех операндов, измененных выражением (если таковые имеются).
Каждое выражение, которое должно сохранять равенство, дополнительно должно быть стабильным : два вычисления такого выражения с одинаковыми входными объектами должны давать равные результаты при отсутствии каких-либо явных изменений этих входных объектов между вычислениями.
Если не указано иное, каждое выражение, используемое в requires-expression , должно быть сохраняющим равенство и стабильным, и вычисление выражения может изменять только свои неконстантные операнды. Операнды, являющиеся константными, не должны изменяться.
Вариации неявных выражений
Выражение requires-expression , использующее выражение, которое является немодифицирующим для некоторого константного lvalue операнда, также неявно требует дополнительных вариаций этого выражения, принимающих неконстантный lvalue или (возможно константный) rvalue для данного операнда, если только такая вариация выражения не требуется явно с отличающейся семантикой. Эти неявные вариации выражений должны удовлетворять тем же семантическим требованиям, что и объявленное выражение. Степень, в которой реализация проверяет синтаксис вариаций, не определена.
Примечания
Примеры
Boolean
типов включают
bool
,
std::
true_type
и
std::
bitset
<
N
>
::
reference
. Указатели не являются
Boolean
типами.
Ограничение вывода формы
{
expression
}
-
>
Same
<
T
>
&&
фактически требует, чтобы
decltype
(
(
expression
)
)
&&
был точно таким же типом, как
T&&
. Это ограничивает как тип выражения, так и его категорию значения.