2015-09-18 6:26 GMT+02:00 Mikhail Strelnikov
Now if you'll comment line 30 containing "yield();" it will still work for Boost.Coroutine but crash on assert for Boost.Coroutine2. This means inner coroutine shoud have less steps than outer coroutine. What is motivation behind that?
Without 'yield()' in line 30 the parent coroutine terminates/is complete (e.g. it leaves your lambda after line 31). Leaving the lambda of the parent coroutine issues a jump back so you return from 'start_parent_coroutine()'. Line 39 calls the child coroutine. 'yield();' at line 16 (inside the child coroutine) triggers a context switch to the parent coroutine which is already complete. That is because the child coroutine is created inside the parent coroutine and thus the calling context is the stack of the parent coroutine.