Я думаю, вы можете просто определить перегрузку подкачки в том же пространстве имен, что и класс, даже если он находится в глобальном пространстве имен. Вы ищете что-то подобное?
#include <iostream>
#include <utility>
struct S {
void swap(S& other)
{
using std::swap;
swap(data, other.data);
}
int data;
};
void swap(S& lhs, S& rhs)
{
lhs.swap(rhs);
}
int main()
{
using std::swap;
S a = { 10 }, b = { 20 };
std::cout << a.data << ' ' << b.data << std::endl;
swap(a, b);
std::cout << a.data << ' ' << b.data << std::endl;
return 0;
}
Обратите внимание на using std::swap
в основном. Так что, если вы закомментируете перегрузку подкачки для класса, код вернется к std :: swap.