2

これがコンパイラのバグ (Arch Linux の gcc 4.8) なのか、標準の問題なのかはわかりませんが、以下のコードはコンパイルに失敗します。getFoo1 は許可されているのに getFoo2 は許可されていないのはなぜですか?

struct Foo {
    int _i;
    Foo(int i):_i(i) { }
};

Foo getFoo1(int i) {
    if(i == 3) {
        return { i + 2 };
    } else {
        return { i };
    }
}

Foo getFoo2(int i) {
    return i == 3 ? { i + 2 } : { i };
}

int main() {
    auto foo1 = getFoo1(3); //fine
    auto foo2 = getFoo2(3); //oops
    return 0;
}
4

1 に答える 1