下面的代码不能在 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&'