【发布时间】:2011-06-16 12:42:57
【问题描述】:
我正在寻找一些命令行标志(如果它们存在的话)来禁用这种类型的 C++ 代码的 GCC 错误:
#include <string>
void m(std::string& s) { }
int main()
{
m(std::string(""));
}
G++ 给出这个错误:
错误:从 'std::string' 类型的临时变量中对类型 'std::string&' 的非常量引用的初始化无效
原因是能够从 VC++ 和 Sun Studio 快速迁移(无需任何代码更改),因为两者都默默地接受临时到非 const 左值引用转换。我知道在代码更改方面需要做些什么——我严格要求一种方法来做到这一点无需更改代码。
我将使用 GCC 4.x。
【问题讨论】:
-
G++ 可能没有标记来消除此错误。
-
我遇到了这个确切的问题,也将 VC 代码移植到 GCC。在 GCC 中没有禁用此错误的选项。您可以通过查看 gcc/cp/call.c 中的错误发出位置来自己确认这一点(4.6 中的函数 initialize_reference)。您必须修复代码。 (或修补 GCC 以理解此语法)
-
即使你能以某种方式禁用错误,代码仍然无法工作。感谢编译器为您标记此内容。看来您真正的问题不是如何禁用错误,而是如何在 G++ 中启用 VC++ 供应商扩展。这是完全不同的东西。
-
@VJo:禁用警告不是尼克想要的。他希望禁用错误。
-
@VJo:我想你误会了。显然,他希望禁用错误但仍保持“正确”构建:)