22 Iterators library [iterators]

22.3 Iterator requirements [iterator.requirements]

22.3.4 Iterator concepts [iterator.concepts]

22.3.4.5 Concept Incrementable [iterator.concept.inc]

The Incrementable concept specifies requirements on types that can be incremented with the pre- and post-increment operators.
The increment operations are required to be equality-preserving, and the type is required to be EqualityComparable.
[Note
:
This supersedes the annotations on the increment expressions in the definition of WeaklyIncrementable.
end note
]
template<class I>
  concept Incrementable =
    Regular<I> &&
    WeaklyIncrementable<I> &&
    requires(I i) {
      { i++ } -> Same<I>;
    };
Let a and b be incrementable objects of type I.
I models Incrementable only if
  • If bool(a == b) then bool(a++ == b).
  • If bool(a == b) then bool(((void)a++, a) == ++b).
[Note
:
The requirement that a equals b implies ++a equals ++b (which is not true for weakly incrementable types) allows the use of multi-pass one-directional algorithms with types that model Incrementable.
end note
]