std::incrementable

From cppreference.com
< cpp‎ | iterator
Iterator library
Iterator concepts
incrementable
(C++20)
Iterator primitives
Algorithm concepts and utilities
Indirect callable concepts
Common algorithm requirements
(C++20)
(C++20)
(C++20)
Utilities
(C++20)
Iterator adaptors
Range access
(C++11)(C++14)
(C++14)(C++14)
(C++11)(C++14)
(C++14)(C++14)
(C++17)(C++20)
(C++17)
(C++17)
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

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)
  • bool(a == b) implies bool ( ( ( void )a++, a) == ++b)

Equality preservation

Expressions declared in requires expressions of the standard library concepts are required to be equality-preserving

See also

specifies that a semiregular type can be incremented with pre- and post-increment operators
(concept)
(C++20)
specifies that a type is the same as another type
(concept)