From cppreference.com
Defined in header
template<classS,classI>conceptsized_sentinel_for=std::sentinel_for<S,I>&&!std::disable_sized_sentinel_for<std::remove_cv_t<S>,std::remove_cv_t<I>>&&requires(constI&i,constS&s){{s-i}->std::same_as<std::iter_difference_t<I>>;{i-s}->std::same_as<std::iter_difference_t<I>>;}; (1) (since C++20)template<classS,classI>inlineconstexprbooldisable_sized_sentinel_for=false; (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
. Such specializations are usable in
and have type constbool.
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 n is representable by std::iter_difference_t<I>, then s-i is well-defined and equals n.
If -n is representable by std::iter_difference_t<I>, then i-s is well-defined and equals -n.
Equality preservation
Expressions declared in
of the standard library concepts are required to be
(except where stated otherwise).
Implicit expression variations
A
that uses an expression that is non-modifying for some constant lvalue operand also requires
implicit expression variations
.
See also