co_await中的catch不再在GCC12中编译



我有一个像这样的代码:

auto func() -> asio::awaitable<void> {
try {
co_await async_operation();
} catch(boost::system::system_error const& e) {
co_return co_await another_async_operation();
}
}

这段代码在GCC 11下可以很好地工作,但是在GCC 12下无法编译:

file.cpp:3:19: error: await expressions are not permitted in handlers
3 |         co_return co_await another_async_operation();
|                   ^~~~~~~~

这是为什么,我怎么能解决它?

这在[expr.await]/2:

中是明确禁止的。

等待表达式只能出现在处理程序([except.pre])之外的函数体复合语句中可能求值的表达式中。

这里的错误信息非常清楚:你不能在异常处理程序中等待。它之前编译的是一个bug,这一直是规则(P0912R5)。

相关内容

  • 没有找到相关文章

最新更新