[英]Why does this rvalue reference bind to an lvalue?
我不明白为什么以下代码在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] )。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.