これがコンパイラのバグ (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;
}