[iterator.cust] (original) (raw)

23 Iterators library [iterators]

23.3 Iterator requirements [iterator.requirements]

23.3.3 Customization points [iterator.cust]

23.3.3.1 ranges​::​iter_­move [iterator.cust.move]

The expression ranges​::​iter_­move(E) for a subexpression E is expression-equivalent to:

If ranges​::​iter_­move(E) is not equal to *E, the program is ill-formed, no diagnostic required.

23.3.3.2 ranges​::​iter_­swap [iterator.cust.swap]

Let iter-exchange-move be the exposition-only function:

template<class X, class Y> constexpr iter_value_t<X> iter-exchange-move(X&& x, Y&& y) noexcept(noexcept(iter_value_t<X>(iter_move(x))) && noexcept(*x = iter_move(y)));

Effects:Equivalent to:

iter_value_t old_value(iter_move(x)); *x = iter_move(y); return old_value;

The expression ranges​::​iter_­swap(E1, E2) for subexpressionsE1 and E2 is expression-equivalent to: