这个问题只能说c++23只是一个tick,不是tock版本,很多设计没有考虑全面
你这个问题的本质是,如果coroutine是一个functor,到底哪些算coroutine的state,很明显,在现在的版本里,capture的部分不属于coroutine的state,因为它们是functor struct的data member
c++标准在推进的时候,基本都是先考虑free function情况,再推广到lambda和template上
所以最好的办法就是不要用,等它完善。如果一定要用,比如说对coroutine的signature有要求,你的例子是不对的,因为你return lambda(),是一个promise,如果你本身return lambda的话,你只有打包一层,把需要capture的,用普通lambda capture by value,然后在lambda內部再define and call coroutine lambda
【 在 allegro 的大作中提到: 】
: lambda对一个local变量capture by value没有问题。问题在返回的coroutine被resume时,这个capture自身已经被析构掉了。所以这不是shared_ptr能避免的。
: - 来自 水木社区APP v3.5.7
--
FROM 115.193.191.*