Я ошибочно вставил оператор throw
после return
со следующим конечным результатом:
void DXManager::initialize(const std::shared_ptr<nae::Context>& ctx_ptr)
{
// ...
if (FAILED(result))
{
return throw std::exception("Failed to enumerate display mode list");
}
// ...
}
Я успешно построил решение, прежде чем заметил ошибку, и мне любопытно, какая спецификация допускает приведенный выше синтаксис.
Читая cppreference.com (под примечаниями), я вижу
Выражение throw классифицируется как выражение prvalue типа void. Как и любое другое выражение, оно может быть подвыражением в другом выражении, чаще всего в условном операторе:
double f(double d)
{
return d > 1e7 ? throw std::overflow_error("too big") : d;
}
// ...
но я не совсем уверен, что это то, что я ищу.