c ++ co_await 表达式中的临时协程

Vic*_*kel 3 c++ c++20 c++-coroutine

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

task g(const S&);

task f() {
    co_await g(S{});
}
Run Code Online (Sandbox Code Playgroud)

在 clang 和 msvc ( https://godbolt.org/z/HqHae8 ) 上,恢复 g 后临时似乎被破坏了,无论是在 gcc ( https://godbolt.org/z/hFWvU- ) 上似乎临时在初始挂起后被销毁。

Oli*_*liv 5

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

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