std::experimental::ranges:: Incrementable
|
Определено в заголовочном файле
<experimental/ranges/iterator>
|
||
|
template
<
class
I
>
concept
bool
Incrementable
=
|
(ranges TS) | |
Концепт
Incrementable<I>
определяет требования к типам, которые могут быть инкрементированы (с помощью операторов пре- и постинкремента). Операции инкремента (включая те, которые требуются
WeaklyIncrementable
) должны сохранять равенство, и тип должен быть
EqualityComparable
.
Пусть
a
и
b
будут инкрементируемыми объектами типа
I
.
Incrementable<I>
удовлетворяется только если:
- Если bool ( a == b ) , то bool ( a ++ == b ) .
- Если bool ( a == b ) , то bool ( void ( a ++ ) , a ) == ++ b ) .
Сохранение равенства
Выражение называется сохраняющим равенство если оно даёт равные результаты при равных входных данных.
- Входные данные выражения состоят из его операндов.
- Выходные данные выражения состоят из его результата и всех операндов, изменённых выражением (если таковые имеются).
Каждое выражение, которое должно сохранять равенство, дополнительно должно быть стабильным : два вычисления такого выражения с одинаковыми входными объектами должны давать равные результаты при отсутствии явных промежуточных изменений этих входных объектов.
Если не указано иное, каждое выражение, используемое в requires-expression , должно сохранять равенство и быть стабильным, и вычисление выражения может изменять только свои неконстантные операнды. Операнды, являющиеся константными, не должны изменяться.
Примечания
Требование, что
a
равно
b
подразумевает, что
++a
равно
++b
позволяет использовать многопроходные алгоритмы с типами
Incrementable
.