Namespaces
Variants

std:: rethrow_exception

From cppreference.net
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

type de pointeur partagé pour la gestion des objets d'exception
(typedef)
capture l'exception actuelle dans un std::exception_ptr
(fonction)