При разработке приложения у меня была следующая проблема. Я хотел вернуть пустой 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
? Есть ли какая-то особая причина для этого?