Use std::swap instead of custom methods
std::swap works out-of-the-box for objects that are
MoveConstructible, see https://stackoverflow.com/q/39675073. If it does not work out-of-the box,
std::swap can be overloaded for custom objects. Hence,
std::swap should be preferred instead of custom
swap methods which do just the trivial thing in most cases.