Namespaces
Variants

std::experimental::ranges:: WeaklyIncrementable

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

concept bool WeaklyIncrementable =
Semiregular < I > &&
requires ( I i ) {
typename ranges :: difference_type_t < I > ;
requires SignedIntegral < ranges :: difference_type_t < I >> ;
{ ++ i } - > Same < I > & ; /* не требуется сохранять равенство */
i ++ ; /* не требуется сохранять равенство */

} ;
(ranges TS)

Концепт WeaklyIncrementable<I> определяет требования к типам, которые могут быть инкрементированы (с помощью пре- и постинкрементных операторов). Операции инкремента не обязаны сохранять равенство, и тип не обязан быть EqualityComparable .

Пусть i будет объектом типа I . i называется инкрементируемым , если он находится в области определения как префиксного, так и постфиксного инкремента. WeaklyIncrementable<I> выполняется только если:

  • ++ i и i ++ имеют одинаковую область определения;
  • Если i инкрементируем, тогда:
    • ++ i и i ++ оба продвигают i к следующему элементу; и
    • ++ i ссылается на тот же объект, что и i .

Сохранение равенства

Выражение называется сохраняющим равенство если оно даёт равные результаты при равных входных данных.

  • Входные данные выражения состоят из его операндов.
  • Выходные данные выражения состоят из его результата и всех операндов, измененных выражением (если таковые имеются).

Каждое выражение, которое должно сохранять равенство, дополнительно должно быть стабильным : два вычисления такого выражения с одинаковыми входными объектами должны давать равные выходные данные при отсутствии каких-либо явных изменений этих входных объектов между вычислениями.

Примечания

Для типов WeaklyIncrementable , a равно b не подразумевает, что ++ a равно ++ b . Алгоритмы для таких типов должны быть однопроходными и никогда не пытаться проходить через одно и то же значение дважды.