const在具有尾随返回类型的自动返回声明中意味着什么?

时间:2017-03-31 14:57:15

标签: c++ c++11 auto trailing-return-type

我需要从函数返回一个const引用。这段代码完成了这件事:

auto test()->add_lvalue_reference<const int>::type
{
    static int i{50};
    return i;
}

int & i{test()}; // doesn't compile

但是这个看起来非常相似的片段给出了错误的结果:

auto const test()->add_lvalue_reference<int>::type
{
    static int i{50};
    return i;
}

int & i{test()}; // compiles thougth test() returned a const

我将关键字const从类型声明移到了返回声明。

起初,我想,扣除后,功能签名变成了第二种情况:

int & const test(); // not valid - const qualifiers cannot be applied to int&

这不是有效的c ++。但是使用auto说明符进行编译。

所以我的问题是const在具有自动尾随返回的函数返回类型中的含义是什么?或者它可能被丢弃了?

1 个答案:

答案 0 :(得分:5)

auto const test()->add_lvalue_reference<int>::type

这是不正确的,请参阅[dcl.fct]/2(在使用尾随返回类型的情况下,&#34; T应为单个< em> type-specifier auto&#34;)。