Two objects of this type can be dereferenced and the resulting values can be swapped using unqualified function call swap() in the context where both std::swap and the user-defined swap()s are visible.

Requirements

2) For any dereferencable object x of type T (that is, any value other than the end iterator), *x satisfies the Swappable requirements.

Many standard library functions expect their arguments to satisfy ValueSwappable, which means that any time the standard library performs a swap, it uses the equivalent of usingstd::swap; swap(*iter1, *iter2);.