在嵌套名称说明符中使用 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 错误 接受代码:通过实验,它似乎只是在检查它们存在后忽略任何前面的组件。
考虑以下演示程序。
#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 错误 接受代码:通过实验,它似乎只是在检查它们存在后忽略任何前面的组件。