Возможно ли co_await в предложении catch? - PullRequest
4 голосов
/ 12 апреля 2019

следующий код:

try {
  throw 42;
} catch (int i) {
  co_await somefuture;
}

компилируется с clang 6 и 7 с -fcoroutines-ts. Однако он не компилируется с Visual C ++ 15 (2017) Visual C ++ 16 (2019) с / await с ошибкой

C2304: нельзя использовать 'co_await' внутри блока захвата

Стандартный черновик C ++ 20 и cppreference , похоже, ничего об этом не упоминают.

Это недостающая функция в компиляторе Microsoft или я неправильно понял стандарт?

1 Ответ

10 голосов
/ 12 апреля 2019

С [expr.await] , акцент мой:

выражение-ожидания должно появляться только в потенциально вычисленном выражении в составном-выражении тела-функции вне обработчика ([исключая]) .

MSVC правильно отклонить.

...