【问题标题】:decltype(auto) function return type does not deduce && typesdecltype(auto) 函数返回类型不推导出 && 类型
【发布时间】: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&&>);
}

【问题讨论】:

标签: c++


【解决方案1】:

这似乎是 GCC 中的一个错误。因为decltype(ret)int&amp;&amp;foo1 应该有返回类型int&amp;&amp;。但是,这会立即呈现foo1 格式错误,因为返回int&amp;&amp; 的函数不能从ret 初始化其返回值,这是一个左值(您需要std::move 才能使其正常工作)。请注意,Clang 是正确的(请参阅问题的 cmets 中的链接)。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2014-02-20
    • 1970-01-01
    • 2017-08-02
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多