Этот код компилируется:
std::string f(bool a, std::string const& b)
{
if (a) return b;
return {};
}
Этот код также компилирует:
std::string f(bool a, std::string const& b)
{
return a ? b : std::string{};
}
Этот код не компилируется:
std::string f(bool a, std::string const& b)
{
return a ? b : {};
}
Учитывая, что оба значения результата оператора ?:
Должны быть одного типа, почему он не выводит тип, как в первом примере?
Похоже, что этот вопрос может иметь аналогичный ответ на этот вопрос (который по сути сводится к "потому что никто не думал об этом при написании спецификации языка"). Однако я все еще считаю полезным сохранить этот вопрос, так как сам вопрос отличается, он все еще достаточно удивителен, и другой не будет искать эту проблему.