Я не знаю, является ли это ошибкой компилятора (gcc 4.8 на Arch Linux) или проблемой со стандартом, но приведенный ниже код не удается скомпилировать. Почему 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;
}
Отличная альтернатива. – chris
В качестве альтернативы, отбросьте '{}' вообще. –
@ DavidRodríguez-dribeas: Right –