【发布时间】:2018-01-13 21:09:41
【问题描述】:
我不明白为什么以下代码在 GCC 8.0 上编译:
decltype(auto) foo(int&& r) {
return r;
}
在foo中,r的声明类型是int&&,所以foo的返回类型也是int&&。但是r本身是左值,左值不能绑定右值引用。
我错过了什么吗?
【问题讨论】:
-
转载gcc8,看来gcc8推导出返回类型为
int&。 -
@songyuanyao 他们声称代码可以编译,所以这不会是复制。
-
看起来确实像一个 GCC 错误。但是请注意,如果您要返回带括号的 id 表达式(
return (r);,它会按设计工作)。 -
@curiousguy12:顺便说一句,欢迎来到 StackOverflow。第一个问题很好,我们需要更多像你这样的人。
标签: c++ c++14 language-lawyer rvalue-reference decltype