Namensräume
Varianten
Aktionen

std::rethrow_exception

Von cppreference.com
< cpp‎ | error
 
 
 
Definiert in Header <exception>
[[noreturn]] void rethrow_exception( std::exception_ptr p );
(seit C++11)
(constexpr seit C++26)

Wirft das zuvor erfasste Ausnahmeobjekt, auf das durch den Ausnahmezeiger p verwiesen wird, oder eine Kopie dieses Objekts.

Es ist nicht spezifiziert, ob eine Kopie erstellt wird. Wenn eine Kopie erstellt wird, wird der Speicher dafür auf nicht spezifizierte Weise zugewiesen.

Das Verhalten ist undefiniert, wenn p null ist.

Inhalt

[edit] Parameter

p - nicht-null std::exception_ptr

[edit] Ausnahmen

Das Ausnahmeobjekt, auf das von p verwiesen wird, wenn keine Kopie erstellt wird.

Andernfalls eine Kopie eines solchen Ausnahmeobjekts, wenn die Implementierung das Ausnahmeobjekt erfolgreich kopiert hat.

Andernfalls std::bad_alloc oder die Ausnahme, die beim Kopieren des Ausnahmeobjekts ausgelöst wird, wenn die Zuweisung oder das Kopieren fehlschlägt.

[edit] Hinweise

Vor P1675R2 durfte rethrow_exception das Ausnahmeobjekt nicht kopieren, was auf einigen Plattformen, auf denen Ausnahmeobjekte auf dem Stack zugewiesen werden, nicht implementierbar war.

Feature-Test-Makro Wert Std Feature
__cpp_lib_constexpr_exceptions 202411L (C++26) constexpr für Ausnahme-Typen

[edit] Beispiel

#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

Mögliche Ausgabe

Caught exception: 'basic_string::at: __n (which is 1) >= this->size() (which is 0)'

[edit] Siehe auch

Shared-Pointer-Typ zur Handhabung von Ausnahmeobjekten
(Typedef) [bearbeiten]
erfasst die aktuelle Ausnahme in einem std::exception_ptr
(Funktion) [bearbeiten]