При разработке приложения у меня возникла следующая проблема. Я хотел вернуть пустой std::list<string>
, когда указатель на указанную функцию был нулевым, или результат этой функции в противном случае. Это упрощенная версия моего кода:
typedef std::list<std::string> (*ParamGenerator)();
std::list<std::string> foo() {
/* ... */
ParamGenerator generator = ...;
if(generator)
return generator();
else
return {};
}
Однако в этих случаях мне обычно нравится использовать троичный оператор (?:
), поэтому я попытался использовать его следующим образом (как обычно):
return generator ? generator() : {};
Но получил эту ошибку:
somefile.cpp:143:46: error: expected primary-expression before ‘{’ token
somefile.cpp:143:46: error: expected ‘;’ before ‘{’ token
Значит ли это, что я не могу использовать троичный оператор для возврата объектов, созданных с использованием их конструктора из initializer_list
? Есть ли какая-то конкретная причина для этого?