std:: incrementable

From cppreference.com
Iterator library
Iterator concepts
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 ) , and
  • 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 (except where stated otherwise).

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)