[common.iter.cust] # 24 Iterators library [[iterators]](./#iterators) ## 24.5 Iterator adaptors [[predef.iterators]](predef.iterators#common.iter.cust) ### 24.5.5 Common iterators [[iterators.common]](iterators.common#common.iter.cust) #### 24.5.5.7 Customizations [common.iter.cust] [🔗](#lib:iter_move,common_iterator) `friend constexpr decltype(auto) iter_move(const common_iterator& i) noexcept(noexcept(ranges::iter_move(declval()))) requires [input_iterator](iterator.concept.input#concept:input_iterator "24.3.4.9 Concept input_­iterator [iterator.concept.input]"); ` [1](#1) [#](http://github.com/Eelis/draft/tree/9adde4bc1c62ec234483e63ea3b70a59724c745a/source/iterators.tex#L5831) *Hardened preconditions*: holds_alternative(i.v_) is true[.](#1.sentence-1) [2](#2) [#](http://github.com/Eelis/draft/tree/9adde4bc1c62ec234483e63ea3b70a59724c745a/source/iterators.tex#L5835) *Effects*: Equivalent to: return ranges​::​iter_move(get(i.v_)); [🔗](#lib:iter_swap,common_iterator) `template<[indirectly_swappable](alg.req.ind.swap#concept:indirectly_swappable "24.3.7.4 Concept indirectly_­swappable [alg.req.ind.swap]") I2, class S2> friend constexpr void iter_swap(const common_iterator& x, const common_iterator& y) noexcept(noexcept(ranges::iter_swap(declval(), declval()))); ` [3](#3) [#](http://github.com/Eelis/draft/tree/9adde4bc1c62ec234483e63ea3b70a59724c745a/source/iterators.tex#L5848) *Hardened preconditions*: holds_alternative(x.v_) and holds_alternative(y.v_) are each true[.](#3.sentence-1) [4](#4) [#](http://github.com/Eelis/draft/tree/9adde4bc1c62ec234483e63ea3b70a59724c745a/source/iterators.tex#L5853) *Effects*: Equivalent to ranges​::​iter_swap(get(x.v_), get(y.v_))[.](#4.sentence-1)