Effects: Constructs a move_iterator, value-initializing current. Iterator operations applied to the resulting iterator have defined behavior if and only if the corresponding operations are defined on a value-initialized iterator of type I.
explicit constexpr move_iterator(I i);
Effects: Constructs a move_iterator, initializing current with i.
constexpr move_iterator(const move_iterator<ConvertibleTo<I>>& i);
Effects: Constructs a move_iterator, initializing current with i.current.
constexpr move_iterator& operator=(const move_iterator<ConvertibleTo<I>>& i);
Effects: Assigns i.current to current.
constexpr reference operator*() const;
Effects: Equivalent to: return iter_move(current);
constexpr move_iterator& operator++();
Effects: Equivalent to ++current.
Returns: *this.
constexpr void operator++(int);
Effects: Equivalent to ++current.
constexpr move_iterator operator++(int)
requires ForwardIterator<I>;
Effects: Equivalent to:
move_iterator tmp = *this; ++current; return tmp;
constexpr move_iterator& operator--()
requires BidirectionalIterator<I>;
Effects: Equivalent to --current.
Returns: *this.
constexpr move_iterator operator--(int)
requires BidirectionalIterator<I>;
Effects: Equivalent to:
move_iterator tmp = *this; --current; return tmp;
constexpr move_iterator operator+(difference_type n) const
requires RandomAccessIterator<I>;
Effects: Equivalent to: return move_iterator(current + n);
constexpr move_iterator& operator+=(difference_type n)
requires RandomAccessIterator<I>;
Effects: Equivalent to current += n.
Returns: *this.
constexpr move_iterator operator-(difference_type n) const
requires RandomAccessIterator<I>;
Effects: Equivalent to: return move_iterator(current - n);
constexpr move_iterator& operator-=(difference_type n)
requires RandomAccessIterator<I>;
Effects: Equivalent to current -= n.
Returns: *this.
constexpr reference operator[](difference_type n) const
requires RandomAccessIterator<I>;
Effects: Equivalent to: return iter_move(current + n);
template <class I1, class I2>
requires EqualityComparableWith<I1, I2>
constexpr bool operator==(
const move_iterator<I1>& x, const move_iterator<I2>& y);
Effects: Equivalent to: return x.current == y.current;
template <class I1, class I2>
requires EqualityComparableWith<I1, I2>
constexpr bool operator!=(
const move_iterator<I1>& x, const move_iterator<I2>& y);
Effects: Equivalent to: return !(x == y);
template <class I1, class I2>
requires StrictTotallyOrderedWith<I1, I2>
constexpr bool operator<(
const move_iterator<I1>& x, const move_iterator<I2>& y);
Effects: Equivalent to: return x.current < y.current;
template <class I1, class I2>
requires StrictTotallyOrderedWith<I1, I2>
constexpr bool operator<=(
const move_iterator<I1>& x, const move_iterator<I2>& y);
Effects: Equivalent to: return !(y < x);
template <class I1, class I2>
requires StrictTotallyOrderedWith<I1, I2>
constexpr bool operator>(
const move_iterator<I1>& x, const move_iterator<I2>& y);
Effects: Equivalent to: return y < x;
template <class I1, class I2>
requires StrictTotallyOrderedWith<I1, I2>
constexpr bool operator>=(
const move_iterator<I1>& x, const move_iterator<I2>& y);
Effects: Equivalent to: return !(x < y);.
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).