gccのcopy-initializationのバグ
- copy-initializationにおいて、const参照がconstオブジェクトから初期化されるとき、コピーされたオブジェクトで初期化されてしまう (gcc-3.4と4.1で確認)
- 組み込み型の場合のみらしい
- 関数の引数のcopy-initializationは大丈夫らしい
struct klass { klass(int const &i) {} }; void test_bug() { int const i = 999; klass k = i; } // ↓gccはこんな感じのコードを生成する void test_bug_gen() { int const i = 999; int Q = 999; // あってはならないオブジェクトQ klass k(Q); } // これは大丈夫 void test_ok() { int i = 999; // constではない klass k = i; } int main() {}