std:: rethrow_exception
|
Определено в заголовочном файле
<exception>
|
||
|
[
[
noreturn
]
]
void
rethrow_exception
(
std::
exception_ptr
p
)
;
|
(начиная с C++11)
(constexpr начиная с C++26) |
|
Выбрасывает ранее перехваченный объект исключения, на который ссылается указатель исключения p , или копию этого объекта.
Не определено, создаётся ли копия. Если копия создаётся, то память для неё выделяется неопределённым способом.
Поведение не определено, если p является нулевым указателем.
Содержание |
Параметры
| p | - | ненулевой std::exception_ptr |
Исключения
Объект исключения, на который ссылается p если копия не создается.
В противном случае, копия такого объекта исключения, если реализация успешно скопировала объект исключения.
В противном случае, std::bad_alloc или исключение, выброшенное при копировании объекта исключения, если выделение памяти или копирование завершилось неудачей, соответственно.
Примечания
До
P1675R2
,
rethrow_exception
не разрешалось копировать объект исключения, что невозможно реализовать на некоторых платформах, где объекты исключений размещаются в стеке.
| Макрос тестирования возможностей | Значение | Стандарт | Функция |
|---|---|---|---|
__cpp_lib_constexpr_exceptions
|
202411L
|
(C++26) | constexpr для типов исключений |
Пример
#include <exception> #include <iostream> #include <stdexcept> #include <string> void handle_eptr(std::exception_ptr eptr) // передача по значению допустима { try { if (eptr) std::rethrow_exception(eptr); } catch(const std::exception& e) { std::cout << "Caught exception: '" << e.what() << "'\n"; } } int main() { std::exception_ptr eptr; try { [[maybe_unused]] char ch = std::string().at(1); // это генерирует std::out_of_range } catch(...) { eptr = std::current_exception(); // захват } handle_eptr(eptr); } // деструктор для std::out_of_range вызывается здесь, когда eptr уничтожается
Возможный вывод:
Caught exception: 'basic_string::at: __n (which is 1) >= this->size() (which is 0)'
Смотрите также
|
(C++11)
|
тип умного указателя для обработки объектов исключений
(typedef) |
|
(C++11)
|
захватывает текущее исключение в
std::exception_ptr
(функция) |