#include #include void println(const char* s) { puts(s); fflush(stdout); } struct outer_exception {}; struct inner_exception {}; extern "C" { void throw_cxx_exception() { if (std::uncaught_exception()) { println("throwing inner C++ exception"); throw inner_exception(); } else { println("throwing outer C++ exception"); throw outer_exception(); } } void cxx_catch_callback(void (*cb)()) { try { cb(); println("unreachable: callback returns"); } catch (outer_exception) { println("unreachable: caught outer exception in catch (...)"); } catch (inner_exception) { println("unreachable: caught inner exception in catch (...)"); } } }