The Sentinel concept specifies the relationship between an Iterator type and a Semiregular type whose values denote a range.
template <class S, class I>
concept bool Sentinel =
Semiregular<S> &&
Iterator<I> &&
WeaklyEqualityComparableWith<S, I>;
The domain of == can change over time. Given an iterator i and sentinel s such that [i,s) denotes a range and i != s, [i,s) is not required to continue to denote a range after incrementing any iterator equal to i. Consequently, i == s is no longer required to be well-defined.