C++ 协程在co_await表达式中临时

c++ coroutines temporaries in co_await expressions

本文关键字:表达式 await co C++      更新时间:2023-10-16

我想知道co_awaiting引用临时捕获的协程是否有效。那么下面的代码是否有效,我想编译器应该将临时放在协程框架中,就像局部变量一样:

task g(const S&);
task f() {
co_await g(S{});
}

在 clang 和 msvc (https://godbolt.org/z/HqHae8( 上,临时似乎在 g 恢复后被取消,无论是在 gcc (https://godbolt.org/z/hFWvU-( 上,临时似乎在初始暂停后被销毁。

MSVC 和 Clang 是对的,临时在完整表达式结束时被销毁。

对于 GCC,这是错误 95599。显然,此错误正在修复中。