在嵌套名称说明符中使用 decltype

Using decltype in a nested-name-specifier

考虑以下演示程序。

#include <iostream>

namespace N
{
    struct A
    {
        static int n;
    };
    
    A A;
}

int N::A::n = 10;

int main() 
{
    std::cout << N::A::n << '\n';
    std::cout << N::decltype( N::A )::n << '\n';
    
    return 0;
}

程序使用 gcc 8.3 编译成功,例如 www.ideone.com

但是,如果 运行 此程序使用 MS VS 2019,则编译器会发出与嵌套名称说明符中的记录 decltype( N::A ) 相关的错误。如果删除前面的名称 N:: 则程序编译成功。

是MS VS编译器的bug还是nested-name-specifier写错了?

A decltype-specifier 只能出现在 nested-name-specifier 的开头。毕竟,它指定了一个特定的类型,之后 不需要查找名称来解释它。 GCC 错误 接受代码:通过实验,它似乎只是在检查它们存在后忽略任何前面的组件。