構造体内の匿名構造体のブレースまたはイコール初期化子は、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 が作成したバグのため、構造体のデフォルト コンストラクタを作成する必要がありますか? これはばかげています。