Equality preservation of both
ranges::begin and
ranges::end enables passing a range whose iterator
type models
forward_iterator to multiple
algorithms and making multiple passes over the range by repeated calls to
ranges::begin and
ranges::end. Since
ranges::begin is not required to be equality-preserving
when the return type does not model
forward_iterator,
it is possible for repeated calls
to not return equal values or to not be well-defined
.