why not directly ``std::swap`` ?