9

構造体内の匿名構造体のブレースまたはイコール初期化子は、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;
}

Linux で次のコマンドを使用してコンパイルします。

g++ -std=c++11 def-init-anon-atruct.cpp -o def-init-anon-atruct

(最適化フラグを追加しても結果には影響しません)

期待される結果:

0
0

変。VS2013 でそれを実行すると、ガベージ値が返されます。C++11 標準を正しく実装するという点で、これについて正しいのは誰ですか? これがGCCのせいだとは思えません。

役に立たないVSコンパイラオプションと関係がありますか? Windows 拡張機能? MS が作成したバグのため、構造体のデフォルト コンストラクタを作成する必要がありますか? これはばかげています。

4

2 に答える 2