以下代码格式正确吗?
#include <cstddef>
struct Test
{
int member;
static constexpr const size_t Size1 = sizeof(member);
static constexpr const size_t Size2 = sizeof(decltype(member));
static constexpr const size_t Size3 = sizeof(Test::member);
};
问题是在类本身的定义中使用了sizeof(member)
。所有Size1
,Size2
和Size3
初始化程序在gcc,clang和较新的MSVC上都运行良好。但是MSVC 14对Size1
不满意(其他两个都可以)。它说:
错误C2327:'Test :: member':不是类型名称,静态或枚举器
这使我感到困惑,因为member
(无论是否合格)在该类的上下文中似乎是一个有效的表达式。
因此,我应该将此视为旧版MSVC中的错误,还是这样的错误消息合理?