对于此代码
struct test {};
test f() { return test(); }
void print(test *x) {}
int main()
{
print(&f());
print(&test());
}
gcc-4.6 发出两个“获取临时 [-fpermissive] 的地址”错误。这是在 4.6 中引入的,gcc-4.5 可以编译它。
原因很清楚并且有据可查。问题是它是遗留代码,要编译,我们必须让它工作,因此,围绕文件和/或部分代码执行#pragmas 以使用-fpermissive 编译它们。假设客户坚持不修改现有代码(即不能更改使用 &f() 或 &test() 调用 print() 的事实,而不是一般的源文件)。换句话说,这种或另一种方式将被编译,唯一的选择是或多或少的痛苦。
所以问题是 - 是否有任何可能的解决方法可以使其在很多地方不使用 -fpermissive 的情况下工作?-W 标志、C++ 技巧等。