私はこのコードの作業の途中で、ビルド ボタンを押す前にこれは明らかにコンパイルされないだろうと考えました。コンパイルだけでなく、リンクも機能することに驚きました。
私が推測すると、SFINAE がコンパイルの責任を負っていると言うでしょう... そうですか?
struct BaseClass
{
public:
BaseClass() {}
template<typename T>
BaseClass(const T& a_other)
{
int i = 0; // for break point
}
template<typename T>
BaseClass& operator= (const T& a_other)
{
int i = 0; // for break point
return *this;
}
private:
BaseClass(const BaseClass& a_other); // Does not have a definition
BaseClass& operator= (const BaseClass& a_other); // Does not have a definition
};
struct MyClass : public BaseClass
{
};
int main()
{
MyClass i, j;
i = j;
return 0;
}
編集:私はVisual-C++ 2008を使用しています.VSの奇妙な癖かもしれません