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() {}