const 在带有尾随 return 类型的 auto return 声明中意味着什么?

What does const means in auto return declaration with trailing return type?

我需要 return 来自函数的 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 从类型声明移到了 return 声明。

一开始我以为,推导后函数签名变成了第二种情况:

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

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

所以我的问题是 const 在带有自动尾随 return 的函数 return 中是什么意思?或者它可能被丢弃了?

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

这是错误的格式,参见 [dcl.fct]/2(在使用 尾随-return-类型 的情况下,“T 应为单个 类型说明符 auto").