匿名结构中的Brace-or-equal-initializers在VS2013上不起作用

Ash*_*man 9 member-initialization c++11 anonymous-struct visual-c++-2013

结构中的匿名结构中的Brace-or-equal-initializers不会对VS2013生成的输出执行任何操作.有代码:

#include <iostream>
#include <cstdint>


struct S
{
    struct
    {
        uint64_t val = 0;
    }anon;
};

int main()
{
    S s;
    S *a = new S;

    std::cout << s.anon.val << std::endl;
    std::cout << a->anon.val << std::endl;

    return 0;
}
Run Code Online (Sandbox Code Playgroud)

在Linux上使用此命令编译:

g++ -std=c++11 def-init-anon-atruct.cpp -o def-init-anon-atruct
Run Code Online (Sandbox Code Playgroud)

(添加优化标志不会影响结果)

预期结果:

0
0
Run Code Online (Sandbox Code Playgroud)

奇怪的.使用VS2013运行它会产生垃圾值.在实施C++ 11标准方面,谁在这方面是正确的?我非常怀疑这是海湾合作委员会的错.

是否与一些无用的VS编译器选项有关?Windows扩展?由于MS制造的错误,我必须为结构制作默认构造函数?这很荒谬.

R S*_*ahu 6

由于MS制造的错误,我必须为结构制作默认构造函数?这很荒谬.

是的,不,这不荒谬.

编译器也是程序,并且往往有bug - 比其他程序更多.

如果您无法选择该工具,则无论理论上听起来多么荒谬,您都必须使用该工具的局限性.


Bri*_*xon 1

嵌套匿名结构中的非静态数据成员初始值设定项被静默忽略是Visual C++ 2013 中已确认的错误,已在 Visual C++ 2015 RTM 中修复。