co_await inside catch 不再使用 GCC12 编译

co_await inside catch no longer compiling with 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 中被明确禁止:

An await-expression shall appear only in a potentially-evaluated expression within the compound-statement of a function-body outside of a handler ([except.pre]).

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