!?
>>91を読んでさらにひらめいた。

void CopyManipulation::to(Foo *second) {second->value = first->value;}
void CopyManipulation::from(Foo *second) {first->value = second->value;}

static CopyManipulation Foo::copy(Foo *first) {return CopyManipulation(first);}

これで、

Foo::copy(foo).to(bar);
Foo::copy(bar).from(foo);

自由自在。