【发布时间】:2014-10-22 13:29:21
【问题描述】:
让
int a = 0;
那么(int)a 是标准 C++ 中的 右值 吗?
不同的编译器对此代码显示不同的结果:
#include <iostream>
using namespace std;
void f(int& x)
{
cout << "l value" << endl;
}
void f(int&& x)
{
cout << "r value" << endl;
}
int main()
{
int a = 0;
f((int)a);
}
不同结果的编译器:
【问题讨论】:
-
有人检查过是否存在connect 错误吗?粗略的搜索没有找到一个。
-
@Mgetz 我正在寻找,但我没有发现任何明显的东西。
-
Filed as a defect on connect 使用@ShafikYaghmour 的测试用例针对VS2013
-
允许临时对象绑定到非常量引用是 MSVC 长期存在的“功能”。使用
/Za选项将其关闭。 -
MS 终于回复了,这显然是由/Zc:rvalueCast (Enforce type conversion rules) 控制的,他们已将我的错误标记为已修复。我仍在寻求澄清将来是否会默认启用此功能。
标签: c++ visual-c++ casting standards lvalue