【发布时间】:2016-10-08 14:49:01
【问题描述】:
我在使用 GNU g++ 4.9.2 编译以下代码 sn-p 时遇到问题(用于在 g++ 2.95.3 中编译正常)
XOStream &operator<<(ostream &(*f)(ostream &)) {
if(f == std::endl) {
*this << "\n" << flush;
}
else {
ostr << f;
}
return(*this);
}
错误如下:
error: assuming cast to type 'std::basic_ostream<char>& (*)(std::basic_ostream<char>&)' from overloaded function [-fpermissive]
[exec] if(f == std::endl) {
[exec] ^
请指导/帮助。
【问题讨论】:
-
注意:为避免遇到此类问题,您可以编写一个 XOStreamBuffer 并将其附加到 XOStream(几乎未更改的 ostream)
-
那么,你为什么不让
endl做它的事呢?因为您想在XOStream级别而不是ostr级别拦截flush?您也可以直接将else简化为return f(ostr);...我想如果它也在做类似的黑客攻击,那是行不通的。
标签: c++ c++11 g++ ostream endl