Programming Serendipity

プログラミングを中心に種々雑多に書き留めます

"コンパイラで内部エラーが発生しました"というエラーメッセージ(MSVC2013)

コンパイラで内部エラーが発生しました。
簡易リビルド時のエラ-です、通常のビルドに戻します。

というエラーメッセージ。単純化しろとか.idbファイルを消せとか情報があるが、 私のケースでは、クラスの変数の宣言場所で配列を空ブレースで初期化していたことが原因だった。

class Foo{
private:
    char bar[256] = {};
};

そもそも配列を宣言時に初期化しようとするのをやめることで解決。 下のようにブレースの中に0など数値リテラルを入れてある場合は、初期化できない旨のエラーメッセージが表示されるのでこっちはすぐわかるのだけれども。

class Foo{
private:
    char bar[256] = {0};
};

しかしそもそも、普通の変数は宣言場所で初期化できるようになったのだから、配列も初期化できて欲しいところ。 イニシャライザではひとつひとつ指定しなければならないし、 コンストラクタ内でやるのも一度デフォルト値で初期化されたものに代入するから無駄な処理になる。 変更しないものは宣言時に初期化したいのだが、いい方法はないものか。

追記: 普通にイニシャライザに空指定すれば問題なかった。

class Foo{
public:
    Foo()
        : bar()
    {
    }
private:
    char bar[256];
};