使用GCC 7.3.0发生代码转换错误

时间:2018-12-29 04:57:28

标签: c++ gcc

使用GCC 7.3.0发生位移错误

In file included from show_factory.h:21:0,
                 from show.h:21,
                 from main.cpp:27:
common.h: In member function ‘bool tfs::tools::ServerInfo::operator<<(std::ostream&) const’:
common.h:173:22: error: cannot convert ‘std::basic_ostream<char>::__ostream_type {aka std::basic_ostream<char>}’ to ‘bool’ in return
         return os << server_id_;
                      ^~~~~~~~~~
Makefile:630: recipe for target 'main.o' failed

如何在此处更改代码以使其安全无虞?

在旧版GCC(<= 5)中,这应该可以正常编译(根据其仓库https://github.com/yage99/tfs)。 它是GCC 7.3.0的新功能吗?

1 个答案:

答案 0 :(得分:1)

从C ++ 11开始,

std::ostreambool的转换被标记为explicitreturn语句中不考虑显式转换;您需要显式转换。


作为旁注:用于插入流中的operator<<重载的返回类型传统上为std::ostream&。这允许插入链接,例如std::cout << foo << bar。您的operator<<重载通常也应该是一个自由函数,而不是成员。成员不允许使用标准的stream << object语法。