Namespaces
Variants

std:: unexpected_handler

From cppreference.net
Определено в заголовочном файле <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() .

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

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