Пространства имён
Варианты
Действия

std::unexpected_handler

Материал из cppreference.com
< cpp‎ | error
 
 
Библиотека диагностики
Обработка исключений
Сбои обработки исключений
(до C++17*)
unexpected_handler
(до C++17*)
(C++11)(до C++17*)    
(до C++17*)
Коды ошибок
Коды ошибок
Категории исключений
(ТС TM)
Поддержка системных ошибок
(C++11)
(C++11)
Утверждения
Трассировка стека
 
Определено в заголовочном файле <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: брошенный объект исключения уничтожается, а средой выполнения C++ создаётся std::bad_exception и бросается вместо него.

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

[править] Смотрите также

(удалено в C++17)
функция, вызываемая при нарушении спецификации динамического исключения
(функция) [править]
(удалено в C++17)
изменяет функцию, вызываемую из std::unexpected
(функция) [править]
(C++11)(удалено в C++17)
получает текущий unexpected_handler
(функция) [править]