Spec-Zone.ru › C++

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().

См. также

unexpected
(удалено в C++17)
функция, вызываемая при нарушении динамического спецификатора исключений
(функция)
set_unexpected
(удалено в C++17)
изменяет функцию, которая будет вызвана std::unexpected
(функция)
get_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

Spec-Zone.ru

Настройки Оффлайн Что нового Помощь О нас
Spec-Zone .ru
спецификации, руководства, описания, API