繁体   English   中英

为什么这个右值引用绑定到左值?

[英]Why does this rvalue reference bind to an lvalue?

我不明白为什么以下代码在GCC 8.0上编译:

decltype(auto) foo(int&& r) {
    return r;
}

foor的声明类型是int&& ,因此foo的返回类型也是int&& 但是r本身是一个左值,而左值不能绑定到右值引用。

我错过了什么吗?

根据[dcl.spec.auto] / 5 ,推导出返回类型,就好像return语句的操作数是decltype的操作数一样。 并且[dcl.type.simple] /(4.2)清楚地指出,由于操作数没有括号,实体的类型是由decltype产生的类型,即int&& 实际上, r是一个左值( [expr.prim.id.unqual] )。

幸运的是,这已经被发现并在两年前作为错误64892提交。 (我想知道为什么没有人能找到时间解决这个问题?)

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM