Вы бы поменялись подобъектами:
swap(static_cast<Bar&>(a), static_cast<Bar&>(b));
Возможно, вам потребуется реализовать функцию подкачки для Bar
, если std::swap
не выполняет работу.Также обратите внимание, что swap
должен быть не членом (и другом, если необходимо).