我正在寻找一些禁用此类C ++代码的GCC错误的命令行标志(如果它们存在):
#include <string>
void m(std::string& s) { }
int main()
{
m(std::string(""));
}
G ++给出了这个错误:
错误:'std :: string&amp;'类型的非const引用的初始化无效来自临时类型'std :: string'
原因是能够从VC ++和Sun Studio快速迁移(没有任何代码更改),因为它们都默认接受临时到非const左值ref转换。我知道在代码更改方面需要做些什么 - 我严格要求一种方法来实现而不进行代码更改。
我将使用GCC 4.x。
答案 0 :(得分:4)
为什么要禁用错误?修复代码而不是依赖于供应商扩展。
答案 1 :(得分:3)
不符合标准&amp;没有办法通过GCC中的标志禁用它。
Vc ++通过非标准扩展错误地支持这一点。尝试使用/Za
(禁用语言扩展名)标记,您应该看到错误。
或者使用/W4
标志可以获得最大警告,它会显示:
warning C4239: nonstandard extension used
答案 2 :(得分:2)
您可以尝试使用CLang构建代码。
CLang已经做了很多工作来获得与VC ++源文件(STL和MFC代码)的兼容性,因此CLang有-fms-extensions
标志允许这些扩展,并生成适当的代码。
MFC的大多数编译都是如此,因此大多数扩展,包括模板中的其他奇怪内容,也都包含在内。