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)。
我的代码如下所示:
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)。