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

Why does this rvalue reference bind to an lvalue?

本文关键字:绑定 引用 为什么      更新时间:2023-10-16

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

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

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

我错过了什么吗?

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

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