以下のコードは、gcc 4.7 ではコンパイルされませんが、VS(9, 10, 11) でコンパイルされますが、gcc 出力に従います。
#include <iostream>
using namespace std;
class A
{
public:
virtual void M() = 0;
};
class B
{
public:
inline B& operator<<(A &value)
{
value.M();
return *this;
}
};
class C: public A
{
public:
virtual void M()
{
cout << "Hello World" << endl;
}
};
int main()
{
B b;
C c;
b << c; //line not erro
b << C(); //Line with error
return 0;
}
gcc ログ
$g++ main.cpp -o test main.cpp: 関数 'int main()' 内:
main.cpp:36:12: エラー: 'b << C()'
メインの 'operator<<' に一致しません。 cpp:36:12: 注: 候補は次のとおりです: main.cpp:14:15: 注: B&
B::operator<<(A&) main.cpp:14:15: 注:
'C からの引数 1の既知の変換はありません' から 'A&' へ