Here is a possible definition of std::swap:
std::swap
template void swap(T& a, T& b) { T tmp(std::move(a)); a = std::move(b);
I believe that is not a valid definition of std::swap because std::swap is defined to take lvalue references, not rvalue references (20.2.2 [utility.swap])