【问题标题】:Are cv-qualifiers allowed on decltype(auto) variables?decltype(auto) 变量是否允许使用 cv 限定符?
【发布时间】:2018-01-15 12:23:28
【问题描述】:

标准规定

如果占位符是 decltype(auto) 类型说明符,则 T 应该是单独的占位符。

decltype(auto)*x7d = &i; // 错误,声明的类型不是普通的decltype(auto)

尚不清楚是否仍然允许使用 cv 限定符。如果他们被允许,那将是有意义的。编译器似乎不同意这个问题。以下代码is accepted by g++rejected by clang++,vc++似乎根本不支持decltype(auto)变量:

int main()
{
    const decltype(auto) sz_text{"test"};
}

【问题讨论】:

    标签: c++ language-lawyer auto decltype c++17


    【解决方案1】:

    要回答这个问题,我们需要引用上一段,它指定T 是什么。在这种情况下,[dcl.type.auto.deduct]/2 说(强调我的):

    一个类型 T 包含一个占位符类型,以及一个对应的 初始化器 e,确定如下:

    • 对于使用包含占位符类型的类型声明的变量,T 是变量的声明类型,e 是 初始化器。如果初始化是直接列表初始化,则 初始化器应该是一个花括号初始化列表,只包含一个 赋值表达式,e 是赋值表达式;

    在这种情况下,Twhole 声明的 sz_text、cv-qualifiers 和所有类型。而且你引用的那段很清楚,如果它包含decltype(auto)作为占位符,那就一定是这样,仅此而已。

    这是一个 GCC 错误。 And an already reported one.

    【讨论】:

    • 是否有开放的错误报告?
    • @VittorioRomeo - 我找不到。并不是说太多,我很少能在没有帮助的情况下找到它们。
    • @VittorioRomeo - 这对我来说是一个难得的机会,因为我很幸运。 Here it is。几乎一样。
    猜你喜欢
    • 1970-01-01
    • 2019-12-17
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2017-11-25
    • 1970-01-01
    • 2023-03-28
    • 2012-04-03
    相关资源
    最近更新 更多