Class template move_sentinel is a sentinel adaptor useful for denoting
ranges together with move_iterator.
When an input iterator type
I and sentinel type S model sentinel_for<S, I>,
move_sentinel<S> and move_iterator<I> model
sentinel_for<move_sentinel<S>, move_iterator<I>> as well.
A move_if algorithm is easily implemented with
copy_if using move_iterator and move_sentinel:
template<input_iterator I, sentinel_for<I> S, weakly_incrementable O,
indirect_unary_predicate<I> Pred>requiresindirectly_movable<I, O>void move_if(I first, S last, O out, Pred pred){
ranges::copy_if(move_iterator<I>{std::move(first)}, move_sentinel<S>{last},
std::move(out), pred);
}