< cpp‎ | iterator
Iterator library
Iterator concepts
Iterator primitives
Algorithm concepts and utilities
Indirect callable concepts
Common algorithm requirements
Iterator adaptors
Stream iterators
Iterator customization points
Iterator operations
Range access
Defined in header <iterator>
template<class I>

    concept incrementable =
        std::regular<I> &&
        std::weakly_incrementable<I> &&
        requires(I i) {
            { i++ } -> std::same_as<I>;

(since C++20)

This concept specifies requirements on types that can be incremented with the pre- and post-increment operators, whose increment operations are equality-preserving, and the type is std::equality_comparable.

Unlike with std::weakly_incrementable, which only support single-pass algorithms, multi-pass one-directional algorithms can be used with types that model std::incrementable.

[edit] Semantic requirements

I models std::incrementable only if given any two incrementable objects a and b of type I:

  • bool(a == b) implies bool(a++ == b), and
  • bool(a == b) implies bool(((void)a++, a) == ++b)

[edit] Equality preservation

Expressions declared in requires-expressions of the standard library concepts are required to be equality-preserving (except where stated otherwise).

[edit] See also

specifies that a semiregular type can be incremented with pre- and post-increment operators
(concept) [edit]
specifies that a type is the same as another type
(concept) [edit]