私はテンプレート プログラミングに関する本を読んでいます。その例の 1 つに、テンプレート化された代入演算子で自己チェックを行うコードがあります。基本的には次のようなものです。
template <typename T>
class Foo
{
public:
template <typename O>
Foo<T> operator= (const Foo<O> & other)
{
if ((void *)this == (void *)&other)
{
std::cerr << "success" << std::endl;
}
else
{
std::cerr << "failure" << std::endl;
}
return *this
}
};
私の理解では、テンプレート化された代入演算子はデフォルトの代入演算子の生成を妨げないため、O = T の場合、テンプレート化されたバージョンでは常にデフォルトの代入演算子が選択されます。つまり、この状況では、O = T になることはありません。
私が疑問に思っているのは、これについての私の理解が正しいかどうかです。もしそうなら、代入演算子が「成功」を出力するある種のトリッキーな階層(Fooを他の何かから派生させた場合、またはそれが他の何かから派生させた場合など)がありますか?
私はいくつかのことを試しましたが、実際にはそれを行うことができません。
前もって感謝します