std:: rethrow_exception
|
Definido en el encabezado
<exception>
|
||
|
[
[
noreturn
]
]
void
rethrow_exception
(
std::
exception_ptr
p
)
;
|
(desde C++11)
(constexpr desde C++26) |
|
Lanza el objeto de excepción previamente capturado referido por el puntero de excepción p , o una copia de ese objeto.
No está especificado si se realiza una copia. Si se realiza una copia, el almacenamiento para ella se asigna de manera no especificada.
El comportamiento es indefinido si p es nulo.
Contenidos |
Parámetros
| p | - | no nulo std::exception_ptr |
Excepciones
El objeto de excepción referido por p si no se realiza ninguna copia.
De lo contrario, una copia de dicho objeto de excepción si la implementación copió exitosamente el objeto de excepción.
De lo contrario, std::bad_alloc o la excepción lanzada al copiar el objeto de excepción, si la asignación o la copia fallan, respectivamente.
Notas
Antes de
P1675R2
,
rethrow_exception
no estaba permitido copiar el objeto de excepción, lo cual es imposible de implementar en algunas plataformas donde los objetos de excepción se asignan en la pila.
| Macro de prueba de características | Valor | Std | Característica |
|---|---|---|---|
__cpp_lib_constexpr_exceptions
|
202411L
|
(C++26) | constexpr para tipos de excepción |
Ejemplo
#include <exception> #include <iostream> #include <stdexcept> #include <string> void handle_eptr(std::exception_ptr eptr) // passing by value is OK { try { if (eptr) std::rethrow_exception(eptr); } catch(const std::exception& e) { std::cout << "Caught exception: '" << e.what() << "'\n"; } } int main() { std::exception_ptr eptr; try { [[maybe_unused]] char ch = std::string().at(1); // this generates a std::out_of_range } catch(...) { eptr = std::current_exception(); // capture } handle_eptr(eptr); } // destructor for std::out_of_range called here, when the eptr is destructed
Salida posible:
Caught exception: 'basic_string::at: __n (which is 1) >= this->size() (which is 0)'
Véase también
|
(C++11)
|
tipo de puntero compartido para manejar objetos de excepción
(typedef) |
|
(C++11)
|
captura la excepción actual en un
std::exception_ptr
(función) |