std:: rethrow_exception
|
Défini dans l'en-tête
<exception>
|
||
|
[
[
noreturn
]
]
void
rethrow_exception
(
std::
exception_ptr
p
)
;
|
(depuis C++11)
(constexpr depuis C++26) |
|
Lance l'objet d'exception précédemment capturé référencé par le pointeur d'exception p , ou une copie de cet objet.
Il n'est pas spécifié si une copie est effectuée. Si une copie est effectuée, le stockage pour celle-ci est alloué de manière non spécifiée.
Le comportement est indéfini si p est nul.
Table des matières |
Paramètres
| p | - | non-null std::exception_ptr |
Exceptions
L'objet exception référencé par p si aucune copie n'est effectuée.
Sinon, une copie de cet objet d'exception si l'implémentation a réussi à copier l'objet d'exception.
Sinon, std::bad_alloc ou l'exception levée lors de la copie de l'objet exception, si l'allocation ou la copie échoue, respectivement.
Notes
Avant
P1675R2
,
rethrow_exception
n'était pas autorisé à copier l'objet d'exception, ce qui est irréalisable sur certaines plateformes où les objets d'exception sont alloués sur la pile.
| Macro de test de fonctionnalité | Valeur | Std | Fonctionnalité |
|---|---|---|---|
__cpp_lib_constexpr_exceptions
|
202411L
|
(C++26) | constexpr pour les types d'exception |
Exemple
#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
Sortie possible :
Caught exception: 'basic_string::at: __n (which is 1) >= this->size() (which is 0)'
Voir aussi
|
(C++11)
|
type de pointeur partagé pour la gestion des objets d'exception
(typedef) |
|
(C++11)
|
capture l'exception actuelle dans un
std::exception_ptr
(fonction) |