cpp/iterator/ranges/iter move

Obtains an rvalue reference or a prvalue temporary from a given iterator.

A is expression-equivalent to:
 * , if has a class or enumeration type and the expression is well-formed when treated as an unevaluated operand, where the overload resolution of  is performed only with the candidates found by argument-dependent lookup.
 * 1) Otherwise,  if  is well-formed and is an lvalue.
 * 2) Otherwise,  if  is well-formed and is an rvalue.

In all other cases, a call to is ill-formed, which can result in substitution failure when  appears in the immediate context of a template instantiation.

If is not equal to, the program is ill-formed, no diagnostic required.