Захват исключения в C++
Копию исключения хранит std::exception_ptr - тип-указатель на
копию текущего исключения, которую можно
хранить после выхода из catch.
Получить копию помогает std::current_exception
из заголовка #include <exception>
внутри обработчика. Запишем захват в переменную
без немедленного повторного броска:
#include <exception>
#include <iostream>
#include <stdexcept>
int main() {
std::exception_ptr held;
try {
throw std::runtime_error("stored");
} catch (...) {
held = std::current_exception();
}
std::cout << static_cast<bool>(held) << "\n";
return 0;
}
После блока try объект held
остается ненулевым и пригоден для
std::rethrow_exception позже, в другом
месте программы или потоке.
В main объявите std::exception_ptr box.
Бросьте std::logic_error с текстом "box",
в catch(...) сохраните указатель через
std::current_exception. Выведите
1, если box не пуст.