Namespaces
Variants

std:: unexpected_handler

From cppreference.net
Definiert im Header <exception>
typedef void ( * unexpected_handler ) ( ) ;
(veraltet in C++11)
(entfernt in C++17)

std::unexpected_handler ist der Funktionstyp (Zeiger auf Funktion ohne Parameter mit void-Rückgabetyp), der durch die Funktionen std::set_unexpected und std::get_unexpected installiert und abgefragt wird, und der durch std::unexpected aufgerufen wird.

Die C++-Implementierung stellt eine Standardfunktion std::unexpected_handler bereit, die std::terminate() aufruft. Falls der Nullzeigerwert installiert wird (mittels std::set_unexpected ), kann die Implementierung stattdessen den Standard-Handler wiederherstellen.

Ein benutzerdefinierter std::unexpected_handler soll entweder das Programm beenden oder eine Ausnahme werfen. Wenn er eine Ausnahme wirft, kann eine der folgenden drei Situationen auftreten:

1) die von std::unexpected_handler geworfene Ausnahme erfüllt die dynamische Ausnahmespezifikation, die zuvor verletzt wurde. Der neuen Ausnahme ist es erlaubt, der Funktion zu entkommen und das Stack-Unwinding setzt sich fort.

2) die von std::unexpected_handler geworfene Exception verletzt weiterhin die Exception-Spezifikation:

2a) Allerdings erlaubt die Exception-Spezifikation std::bad_exception : Das geworfene Exception-Objekt wird zerstört, und std::bad_exception wird durch die C++-Laufzeitumgebung konstruiert und stattdessen geworfen.

2b) die Ausnahmespezifikation erlaubt std::bad_exception nicht: std::terminate() wird aufgerufen.

Siehe auch

(deprecated in C++11) (removed in C++17)
Funktion, die aufgerufen wird, wenn eine dynamische Exception-Spezifikation verletzt wird
(Funktion)
(deprecated in C++11) (removed in C++17)
ändert die Funktion, die von std::unexpected aufgerufen wird
(Funktion)
(deprecated in C++11) (removed in C++17)
ermittelt den aktuellen unexpected_handler
(Funktion)