std::unexpected_handler
Определено в заголовке <exception> | ||
|---|---|---|
typedef void (*unexpected_handler)(); | (устарело в C++11) (удалено в C++17) |
std::unexpected_handler — это тип указателя на функцию (указатель на функцию без аргументов, возвращающую void), который устанавливается и запрашивается функциями std::set_unexpected и std::get_unexpected и вызывается std::unexpected.
Реализация C++ предоставляет функцию по умолчанию std::unexpected_handler, которая вызывает std::terminate(). Если устанавливается значение нулевого указателя (при помощи std::set_unexpected), реализация может восстановить обработчик по умолчанию.
Ожидается, что пользовательская функция std::unexpected_handler либо завершит программу, либо бросит исключение. Если она бросает исключение, может возникнуть одна из следующих трёх ситуаций:
1) исключение, брошенное std::unexpected_handler, удовлетворяет динамическому спецификатору исключений, который был нарушен ранее. Новое исключение разрешено выйти из функции, и продолжение разворачивания стека.
2) исключение, брошенное std::unexpected_handler, всё ещё нарушает спецификатор исключений:
2a) однако, спецификатор исключений позволяет std::bad_exception; объект брошенного исключения уничтожается, а std::bad_exception создаётся средой выполнения C++ и бросается вместо него.
2b) спецификатор исключений не допускает std::bad_exception; вызывается std::terminate().
См. также
|
(удалено в C++17) | функция, вызываемая при нарушении динамического спецификатора исключений (функция) |
|
(удалено в C++17) | изменяет функцию, которая будет вызвана std::unexpected (функция) |
|
(C++11)(удалено в C++17) | получает текущий unexpected_handler (функция) |
© cppreference.com
Licensed under the Creative Commons Attribution-ShareAlike Unported License v3.0.
https://en.cppreference.com/w/cpp/error/unexpected_handler