コピーアンドスワップのイディオムを再利用可能なミックスインに入れようとしています:
template<typename Derived>
struct copy_and_swap
{
Derived& operator=(Derived copy)
{
Derived* derived = static_cast<Derived*>(this);
derived->swap(copy);
return *derived;
}
};
CRTP経由で混合するつもりです:
struct Foo : copy_and_swap<Foo>
{
Foo()
{
std::cout << "default\n";
}
Foo(const Foo& other)
{
std::cout << "copy\n";
}
void swap(Foo& other)
{
std::cout << "swap\n";
}
};
ただし、簡単なテストでは、機能していないことが示されています。
Foo x;
Foo y;
x = y;
これは「デフォルト」を 2 回出力するだけで、「コピー」も「スワップ」も出力されません。ここで何が欠けていますか?