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 name ranges::iter_­move denotes a customization point object ([customization.point.object]).
The expression ranges::iter_­move(E) for some subexpression E is expression-equivalent to the following:
  • iter_­move(E), if that expression is valid, with overload resolution performed in a context that does not include a declaration of ranges::iter_­move.
  • Otherwise, if the expression *E is well-formed:
  • Otherwise, ranges::iter_­move(E) is ill-formed.
    [Note
    :
    This case can result in substitution failure when ranges::iter_­move(E) appears in the immediate context of a template instantiation.
    end note
    ]
If ranges::iter_­move(E) is not equal to *E, the program is ill-formed with no diagnostic required.