我想从http://code.google.com/p/enhsim编译以下代码行:
enh::eout << enh::setw(26);
Run Code Online (Sandbox Code Playgroud)
gcc给出以下错误:
error: no match for 'operator<<' in 'enh::eout << enh::setw(26)'
Run Code Online (Sandbox Code Playgroud)
但是这个EnhSimOutput类(其中enh::eout是一个实例)确实声明:
EnhSimOutput& operator<< (setw& p);
Run Code Online (Sandbox Code Playgroud)
如果我实现一个按值接受对象的操作版本,这个问题就消失了:
EnhSimOutput& operator<< (setw p);
Run Code Online (Sandbox Code Playgroud)
或者如果我将enh::setw对象创建为本地对象,即:
enh::setw wValue(26);
enh::eout << wValue;
Run Code Online (Sandbox Code Playgroud)
我的问题是:为什么gcc不选择运营商的"按引用"版本开头?
编写此代码的开发人员明确地将其编译,但默认gcc拒绝执行此操作.为什么单独声明为局部变量的对象与本地创建的内联之间存在差异?