// Better way of throwing a non-local exception from a coroutine. #include using namespace std; _Event E { public: int v; E(int i) : v(i) {} }; _Coroutine C { void main() { _Enable { _Resume E(13) _At resumer(); // _Throw deprecated for asynchronous raise suspend(); cout << "c ending" << endl; } // enable } // main public: void mem() { resume(); } // mem }; int main() { C c; try { _Enable { c.mem(); } // enable } _CatchResume( E e ) { cout << "caught E.v = " << e.v << endl; } // catch c.mem(); } // main