匿名联合可以简单地是“const”(而不是“constexpr”)吗?

Fed*_*dor 4 c++ constants unions language-lawyer c++11

在以下示例中,匿名union声明 member int i,该成员被注入到封闭范围中,并const位于 union 声明之前:

int main() {
    const union {
        int i = 0;
    };
    i = 1;
}
Run Code Online (Sandbox Code Playgroud)

编译器在处理该程序时存在分歧。

MSVC 接受联合声明,但拒绝i = 1并出现错误:

错误 C3892:“$S1”:无法分配给 const 变量

GCC 接受整个程序而不发出任何警告,只是忽略const前缀。

Clang 在-pedantic-errors模式下发出错误:

匿名联合不能是“const”[-Werror,-Wpedantic]

在线演示

这里哪个编译器是正确的?

Dav*_*ing 7

这是一个已知问题:该定义意味着不允许使用其他decl 说明符,这与有关存储类说明符的声明相矛盾。(我\xe2\x80\x99m 不确定匿名联合的意义const是什么。)

\n