Этот код компилируется:
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 : {};
}
Учитывая, что оба результирующих значения оператора ?:
должны быть одного типа, почему он не выводит тип, как в первом примере?
Похоже, что этот вопрос может иметь аналогичный ответ на this (что, по сути, сводится к "потому что никто не подумал об этом при написании спецификации языка"). Однако я по-прежнему считаю полезным сохранить этот вопрос, поскольку сам вопрос отличается, он все еще достаточно удивителен, а другой не возникнет при поиске этой проблемы.
{}
не имеет типа. - person NathanOliver   schedule 15.05.2019{}
— это список инициализаторов (который здесь нельзя использовать) live: godbolt.org/z/imYL6q - person Richard Critten   schedule 15.05.2019{}
наstd::initializer_list<char>()
также компилируется. - person jcai   schedule 15.05.2019