Namespaces
Variants

std::experimental::ranges:: Incrementable

From cppreference.net
Определено в заголовочном файле <experimental/ranges/iterator>
template < class I >

concept bool Incrementable =
Regular < I > &&
WeaklyIncrementable < I > &&
requires ( I i ) {
{ i ++ } - > Same < I > && ;

} ;
(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 .