std::sized_sentinel_for, std::disable_sized_sentinel_for - cppreference.com
From cppreference.com
| Defined in header |
||
|
|
(1) | (since C++20) |
|
|
(2) | (since C++20) |
1) The sized_sentinel_for concept specifies that an object of the iterator type I and an object of the sentinel type S can be subtracted to compute the distance between them in constant time.
2) The disable_sized_sentinel_for variable template can be used to prevent iterators and sentinels that can be subtracted but do not actually model sized_sentinel_for from satisfying the concept.
A program may specialize disable_sized_sentinel_for for cv-unqualified non-array object type S and I, as long as at least one of which is a program-defined type. Such specializations are usable in constant expressions and have type const bool.
Semantic requirements
Let i be an iterator of type I, and s a sentinel of type S such that [i, s) denotes a range. Let n be the smallest number of applications of ++i necessary to make bool(i == s) be true. I and S model sized_sentinel_for<S, I> only if all following conditions are satisfied:
- If
nis representable bystd::iter_difference_t<I>, thens - iis well-defined and equalsn. - If
-nis representable bystd::iter_difference_t<I>, theni - sis well-defined and equals-n.
Equality preservation
Expressions declared in requires expressions of the standard library concepts are required to be equality-preserving (except where stated otherwise).
Implicit expression variations
A requires expression that uses an expression that is non-modifying for some constant lvalue operand also requires implicit expression variations.