【发布时间】:2019-05-07 14:45:23
【问题描述】:
如果一个函数返回decltype(auto),它返回一个int&&类型的局部变量,为什么返回类型是int&?
如果我将变量转换为它自己的类型,那么返回类型就是我所期望的 (int&&)
#include <utility>
namespace{
auto i = 5;
auto j = 5;
decltype(auto) foo1(){
int&& ret = std::move(i);
return ret;
}
decltype(auto) foo2(){
int&& ret = std::move(j);
return static_cast<decltype(ret)>(ret);
}
}
int main(){
static_assert(std::is_same_v<decltype(foo1()),int&>);
static_assert(std::is_same_v<decltype(foo2()),int&&>);
}
【问题讨论】:
-
一个命名的右值引用(例如
ret)is an lvalue。 -
Clang 实际上拒绝了代码:godbolt.org/z/g_FIOf
标签: c++