std::weakly_incrementable
| Defined in header  <iterator> | ||
| template<class I>   concept weakly_incrementable = | (since C++20) | |
where /*is-signed-integer-like*/<I> is true if std::signed_integral<I> is true or if I is a class that behaves like a signed integer type including all operators, implicit conversions, and std::numeric_limits specializations.
This concept specifies requirements on types that can be incremented with the pre- and post-increment operators, but those increment operations are not necessarily equality-preserving, and the type itself is not required to be std::equality_comparable.
Additionally, for any object i of type I, I satisfies std::weakly_incrementable only if 
- The expressions ++i and i++ have the same domain
-  If iis incrementable, then both ++i and i++ advancei
-  If iis incrementable, then std::addressof(++i) == std::addressof(i)
For std::weakly_incrementable types, a == b does not imply that ++a == ++b.  Algorithms on weakly incrementable types must be single-pass algorithms. These algorithms can be used with istreams as the source of the input data through std::istream_iterator
See also
| specifies that the increment operation on a weakly_incrementable type is equality-preserving and that the type is equality_comparable (concept) |