phi*_*uru 10 c++ language-lawyer c++14 c++17
鉴于类型的定义A:
struct A { int i; };
Run Code Online (Sandbox Code Playgroud)
根据规范[expr.ref](我使用的是n4618):
(如果
E2是非引用,)...如果E1是左值,那么E1.E2是左值; 否则E1.E2是xvalue ...
显然A{}.i是xvalue; 还给出了[dcl.type.simple]:
(for
decltype(e),) - ...如果e是未加密码的 id-expression或未加括号的类成员访问... - 否则,如果e是xvalue,则decltype(e)是T &&,其中T是类型e
因此,decltype( ( A{}.i ) )将产生int &&.
但是我尝试了GCC5.1和Clang3.9,它们产生了int,而vs2015u3产生了int &&.哪个是对的?
| 归档时间: |
|
| 查看次数: |
195 次 |
| 最近记录: |