Boost logo

Boost :

Subject: Re: [boost] {Review] Coroutine reviewstarts today, September 3rd
From: Eugene Yakubovich (eyakubovich_at_[hidden])
Date: 2012-09-11 11:05:54

>> Another issue that I see is with reference/pointer types. The fact
>> that the following code will blow up is troubling:
> X * val is an address of x1/x2 on the stack of foo(). no danglingpointer until coroutine is alive.

Yes, the address would still be valid (stack is not gone) but the
object would have already been destroyed. Maybe a better example:

struct X {
    ~X() { std::cout << "~X" << std::endl; }

typedef boost::coro::generator< X* > gen_t;

void foo(gen_t::self_t& self) {
    X x1, x2;

int main() {
    gen_t g(foo);
    while( g ) {
        X* val = g();
        std::cout << "use val" << std::endl;

    return 0;

Outputs (ran against the coroutine branch):

use val
use val

Clearly the use of x2 occurs after its destruction.

Boost list run by bdawes at, gregod at, cpdaniel at, john at