9 Iterators library [iterators]

9.7 Iterator adaptors [iterators.predef]

9.7.3 Move iterators and sentinels [iterators.move]

9.7.3.2 move_iterator operations [move.iter.ops]

9.7.3.2.13 move_iterator non-member functions [move.iter.nonmember]

template <class I1, class I2> requires SizedSentinel<I1, I2> constexpr difference_type_t<I2> operator-( const move_iterator<I1>& x, const move_iterator<I2>& y);

Effects: Equivalent to: return x.current - y.current;

template <RandomAccessIterator I> constexpr move_iterator<I> operator+( difference_type_t<I> n, const move_iterator<I>& x);

Effects: Equivalent to: return x + n;

friend constexpr rvalue_reference_t<I> iter_move(const move_iterator& i) noexcept(see below);

Effects: Equivalent to: return ranges::iter_move(i.current);

Remarks: The expression in noexcept is equivalent to:

noexcept(ranges::iter_move(i.current))

template <IndirectlySwappable<I> I2> friend constexpr void iter_swap(const move_iterator& x, const move_iterator<I2>& y) noexcept(see below);

Effects: Equivalent to: ranges::iter_swap(x.current, y.current).

Remarks: The expression in noexcept is equivalent to:

noexcept(ranges::iter_swap(x.current, y.current))

template <InputIterator I> constexpr move_iterator<I> make_move_iterator(I i);

Returns: move_iterator<I>(i).