std::unexpected
Определён в заголовочном файле <exception> | ||
|---|---|---|
void unexpected(); | (до C++11) | |
[[noreturn]] void unexpected(); |
(начиная с C++11) (до C++17) (устарело в C++11) |
std::unexpected() вызывается средой выполнения C++, если нарушена динамическая спецификация исключений: из функции выбрасывается исключение, тип которого запрещён её спецификацией исключений.
std::unexpected() также может вызываться непосредственно из программы.
В обоих случаях std::unexpected вызывает установленный в данный момент обработчик std::unexpected_handler. Обработчик std::unexpected_handler по умолчанию вызывает std::terminate.
| Если деструктор сбросил обработчик unexpected во время раскрутки стека, а последующая раскрутка привела к вызову | (до C++11) |
| Если деструктор сбросил обработчик unexpected во время раскрутки стека, поведение не определено в отношении того, какой обработчик будет вызван, если последующая раскрутка приведёт к вызову | (начиная с C++11) |
Исключения
Выбрасывает любое исключение, выброшенное установленным в данный момент обработчиком std::unexpected_handler.
Отчёты об ошибках
Следующие отчёты об ошибках, изменяющие поведение, были применены задним числом к ранее опубликованным стандартам C++.
| DR | Применён к | Опубликованное поведение | Корректное поведение |
|---|---|---|---|
| LWG 2111 | C++11 | эффект вызова std::set_unexpected во время раскруткистека отличается от C++98 и нарушает работу некоторых ABI | сделано неопределённым |
См. также
|
(C++23) | представлено как неожиданное значение (шаблон класса) |
|
(устарело в C++11)(удалено в C++17) | тип функции, вызываемой std::unexpected (определение типа) |
© cppreference.com
Licensed under the Creative Commons Attribution-ShareAlike Unported License v3.0.
https://en.cppreference.com/cpp/error/unexpected