用于禁用“临时到非const引用”错误的G ++标志

时间:2011-06-16 12:42:57

标签: c++ gcc g++

我正在寻找一些禁用此类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。

3 个答案:

答案 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的大多数编译都是如此,因此大多数扩展,包括模板中的其他奇怪内容,也都包含在内。