2016-07-05 20:36 GMT+02:00 Michael Steinberg <michsteinb@gmail.com>:
a) not documented

http://www.boost.org/doc/libs/1_61_0/libs/coroutine2/doc/html/coroutine2/coroutine/asymmetric.html
'Code executed by coroutine-function must not prevent the propagation of the detail::forced_unwind exception. Absorbing that exception will cause stack unwinding to fail. Thus, any code that catches all exceptions must re-throw any pending detail::forced_unwind exception.'
Oh well, I should have noted that we're going directly with context::execution_context now, in whose documentation I could not find this.
 
b) the exception is defined in the detail namespace. That means, one has to use a detail-member to rethrow the one exception that has to leave the coroutine client entry function.

do not absorb exception detail::forced_unwind, e.g. do not use 'catch(...)'
Can *any* exception *but* detail::forced_unwind leak the coroutine (not meaning coroutine::*) that is being driven by context::execution_context without crashing ungracefully? I'm not sure how I could guarantee that without a pattern like "catch( forced_unwind& ) { throw; } catch ( ... ) { ... }". But that can very well be the case, because I'm not so very used to "using" exceptions other than trying my best to write exception-safe code. I should also say that I would never swallow with catch( ... ), it's just that here I did not see any other generic solution.

Michael