Equality preservation of both ranges::begin
enables passing a range whose iterator
type models forward_iterator
algorithms and making multiple passes over the range by repeated calls to
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.