GCCやVCはメンバへのポインタをメンバにもつPOD型を正しくゼロ初期化してくれない。
#include <cassert>
struct foo
{
int mem1;
int foo::* mem2;
};
int main()
{
foo x = {0};
assert(x.mem2 == foo().mem2);
return 0;
}
対応策
POD型の構造体のメンバにはCにないデータ型を指定しない。
というか、Cに存在するデータ型でも0の内部表現が全ビット0でないなら、このバグが出そうな気がする。(そんな環境もってないから確認できねぇけど)