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

c++ coroutines temporaries in co_await expressions

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

task g(const S&);

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

在 clang 和 msvc (https://godbolt.org/z/HqHae8), the temporary seems to be detroyed after g is resumed, whether on gcc (https://godbolt.org/z/hFWvU-) 上,似乎临时文件在初始挂起后被销毁。

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

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