我有一个像这样的代码:
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)。