我不明白为什么以下代码在 GCC 8.0 上编译:
decltype(auto) foo(int&& r) {
return r;
}
在foo
中,r
的声明类型为int&&
,所以foo
的返回类型为还有 int&&
。但是r
本身就是一个左值,左值不能绑定(bind)到右值引用。
我错过了什么吗?
最佳答案
根据[dcl.spec.auto]/5 ,则推导出返回类型,就好像 return
语句的操作数是 decltype
的操作数一样。和[dcl.type.simple]/(4.2)明确指出,由于操作数没有括号,实体的类型是decltype
产生的类型,即int&&
。事实上, r
是一个左值( [expr.prim.id.unqual] )。
幸运的是,这已被发现并归档为 bug 64892两年前。 (我想知道为什么没有人能抽出时间来解决这个问题?)
关于c++ - 为什么这个右值引用绑定(bind)到左值?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/45532034/