[move.iter.nonmember] # 24 Iterators library [[iterators]](./#iterators) ## 24.5 Iterator adaptors [[predef.iterators]](predef.iterators#move.iter.nonmember) ### 24.5.4 Move iterators and sentinels [[move.iterators]](move.iterators#move.iter.nonmember) #### 24.5.4.9 Non-member functions [move.iter.nonmember] [🔗](#lib:operator-,move_iterator) `template constexpr auto operator-( const move_iterator& x, const move_iterator& y) -> decltype(x.base() - y.base()); template<[sized_sentinel_for](iterator.concept.sizedsentinel#concept:sized_sentinel_for "24.3.4.8 Concept sized_­sentinel_­for [iterator.concept.sizedsentinel]") S> friend constexpr iter_difference_t operator-(const move_sentinel& x, const move_iterator& y); template<[sized_sentinel_for](iterator.concept.sizedsentinel#concept:sized_sentinel_for "24.3.4.8 Concept sized_­sentinel_­for [iterator.concept.sizedsentinel]") S> friend constexpr iter_difference_t operator-(const move_iterator& x, const move_sentinel& y); ` [1](#1) [#](http://github.com/Eelis/draft/tree/9adde4bc1c62ec234483e63ea3b70a59724c745a/source/iterators.tex#L5238) *Returns*: x.base() - y.base()[.](#1.sentence-1) [🔗](#lib:operator+,move_iterator) `template constexpr move_iterator operator+(iter_difference_t n, const move_iterator& x); ` [2](#2) [#](http://github.com/Eelis/draft/tree/9adde4bc1c62ec234483e63ea3b70a59724c745a/source/iterators.tex#L5251) *Constraints*: x.base() + n is well-formed and has type Iterator[.](#2.sentence-1) [3](#3) [#](http://github.com/Eelis/draft/tree/9adde4bc1c62ec234483e63ea3b70a59724c745a/source/iterators.tex#L5255) *Returns*: x + n[.](#3.sentence-1) [🔗](#lib:iter_move,move_iterator) `friend constexpr iter_rvalue_reference_t iter_move(const move_iterator& i) noexcept(noexcept(ranges::iter_move(i.current))); ` [4](#4) [#](http://github.com/Eelis/draft/tree/9adde4bc1c62ec234483e63ea3b70a59724c745a/source/iterators.tex#L5268) *Effects*: Equivalent to: return ranges​::​iter_move(i.current); [🔗](#lib:iter_swap,move_iterator) `template<[indirectly_swappable](alg.req.ind.swap#concept:indirectly_swappable "24.3.7.4 Concept indirectly_­swappable [alg.req.ind.swap]") Iterator2> friend constexpr void iter_swap(const move_iterator& x, const move_iterator& y) noexcept(noexcept(ranges::iter_swap(x.current, y.current))); ` [5](#5) [#](http://github.com/Eelis/draft/tree/9adde4bc1c62ec234483e63ea3b70a59724c745a/source/iterators.tex#L5282) *Effects*: Equivalent to: ranges​::​iter_swap(x.current, y.current)[.](#5.sentence-1) [🔗](#lib:make_move_iterator) `template constexpr move_iterator make_move_iterator(Iterator i); ` [6](#6) [#](http://github.com/Eelis/draft/tree/9adde4bc1c62ec234483e63ea3b70a59724c745a/source/iterators.tex#L5294) *Returns*: move_iterator(std​::​move(i))[.](#6.sentence-1)