请考虑以下代码:
std::ostream file;
if( file == NULL ) std::cout << "Failed to open file" << std::endl;
Run Code Online (Sandbox Code Playgroud)
它在传递-std = gnu11(默认来自GCC 5.2)或仅使用时完美编译
gcc code.cpp -o a.out.
它失败了-std = gnu ++ 11,但是:
no match for ‘operator==’ (operand types are ‘std::ofstream {aka std::basic_ofstream<char>}’ and ‘long int’)`
Run Code Online (Sandbox Code Playgroud)
什么是最简单的解决方法?
细节:
我必须使用std = gnu ++ 11来访问shared_ptr定义.此外,我的一些代码是自动生成的,修改生成器会产生合理的努力 - 所以我想知道是否有人可以想出更简单的方法来摆脱这种"缺乏兼容性".
Col*_*mbo 19
这首先编译的唯一原因是因为std::ios,它ofstream源于,operator void*在C++ 11之前提供了非显式(!).从C++ 11开始,explicit operator bool提供了代码,它不允许代码所必需的隐式转换.相反,写
if (!file) std::cout << "Failed to open file" << std::endl;
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
3583 次 |
| 最近记录: |