【发布时间】:2016-11-25 09:38:51
【问题描述】:
这里的代码在类型转换后测试左值或右值:
#include <stdio.h>
template <typename T>
T const f1(T const &t) {
printf("T const \n");
return t;
}
template <typename T>
T f1(T &t) {
printf("T\n");
return t;
}
struct KK {
int a;
};
int main()
{
KK kk;
kk.a=0;
int ii;
f1(kk);
f1((KK)kk);
f1(ii);
f1((int)ii);
return 0;
}
在 gcc link 中,结果是这样的,表明类型转换后产生的右值:
T
T const
T
T const
但在 VC++2010 中,只有当它是类类型时,这是指示右值的结果:
T
T const
T
T
那么当类型转换为 int 时,它是编译器错误还是只是一些未定义的行为?
【问题讨论】:
-
运行这些测试时请使用最新的编译器
-
@MarcoA。 VC++2015 给出的结果与 VC++2010 相同
-
@MarcoA,对不起,我没有。它不是免费的
-
我认为这是VS中的一个扩展。有一些绑定到非 const 引用的东西,但细节太早了。如果你添加
/Za来禁用它们,我猜你应该得到与 gcc 相同的行为。是的,工作online
标签: c++ compiler-bug lvalue-to-rvalue