https://gcc.gnu.org/bugzilla/show_bug.cgi?id=55917
Howard Hinnant <howard.hinnant at gmail dot com> changed: What |Removed |Added ---------------------------------------------------------------------------- CC| |howard.hinnant at gmail dot com --- Comment #14 from Howard Hinnant <howard.hinnant at gmail dot com> --- The main function is not wrapped in a try / catch and an unhandled exception on the main thread still calls std::terminate() as required. I believe that gcc already correctly implements the call to std::terminate() for threads elsewhere, and with the same code that it does for main. It is in the function __cxa_throw, implemented by libsupc++. Here is the specification: http://mentorembedded.github.io/cxx-abi/abi-eh.html#cxx-throw which says in part: > __Unwind_RaiseException begins the process of stack unwinding, described in > Section 2.5. In special cases, such as an inability to find a handler, > _Unwind_RaiseException may return. In that case, __cxa_throw will call > terminate, assuming that there was no handler for the exception. And here is where it is implemented: https://github.com/gcc-mirror/gcc/blob/master/libstdc%2B%2B-v3/libsupc%2B%2B/eh_throw.cc#L87 As long as libsupc++ is being used on the platform, I think you are good to remove the try/catch from execute_native_thread_routine. Fwiw, this is what is done on libc++ / libc++abi (no try/catch at the top of std::thread, and let __cxa_throw call terminate). We get beautiful stack dumps from threaded code over there. :-)