Una excepción detectada es accesible por la función std :: current_exception(), que se define en < excepción >. Esto fue introducido en C++ 11.
std::exception_ptr current_exception();
Sin embargo, std :: exception_ptr es un tipo definido por la implementación, por lo que no puede llegar a los detalles de todos modos. typeid(current_exception()).name()
le dice exception_ptr, no la excepción contenida. Entonces, lo único que puede hacer con él es std :: rethrow_exception(). (Esta función parece estar allí para estandarizar el catch-pass-and-rethrow en los hilos).
¿Qué mensaje le gustaría obtener de la excepción? ¿Qué pasa si el objeto arrojado es un 'int'? Cuando 'atrapa (...) ', no sabe que la excepción capturada * tendrá * un mensaje. – jalf
Esta pregunta me dio un pensamiento extraño (no funcionaría, pero sería divertido si lo hiciera): template catch (const T & ex) {...} No creo que pueda funcionar desde entonces las excepciones son más un mecanismo de tiempo de ejecución ... ¿o no? Los mecanismos de desenrollado de la pila implicados en lanzar una excepción y ramificarse al bloque de captura correcto me parecen mágicos. Quizás el bloque catch correcto para realizar una bifurcación aún se determine en tiempo de compilación, lo que explicaría una de las razones por las que es tan peligroso cruzar los límites del módulo. –
stinky472