cpp/iterator/ranges/iter swap

Swaps values denoted by two iterators.

The effect of the exposition-only helper function is equivalent to

is expression-equivalent to:
 * , if or  has a class or enumeration type and the expression is well-formed, where the overload resolution of  is performed with the additional candidate , excluding  itself.
 * 1) * If the selected overload does not exchange the value denoted by and, the program is ill-formed, no diagnostic required.
 * 2) Otherwise,  if both  and  model  and if  and  model.
 * 3) Otherwise,, if  and  are both modeled, except that  is only evaluated once.
 * 4) Otherwise,  is ill-formed, which can result in substitution failure when  appears in the immediate context of a template instantiation.