◐ Shell
clean mode source ↗

std::unexpected_handler — cppreference.com

Материал из cppreference.com

<tbody> </tbody>

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: брошенный объект исключения уничтожается, а средой выполнения C++ создаётся std::bad_exception и бросается вместо него.

2b) спецификация исключения не разрешает std::bad_exception: вызывается std::terminate().

Смотрите также