Почему я теряю информацию о типе при использовании boost :: copy_exception?

Когда я используюboost::copy_exception скопировать исключение вexception_ptrЯ теряю информацию о типе. Посмотрите на следующий код:

try {
    throw std::runtime_error("something");
} catch (exception& e) {
    ptr = boost::copy_exception(e);
}
if (ptr) {
    try {
        boost::rethrow_exception(ptr);
    } catch (std::exception& e) {
        cout << e.what() << endl;
        cout << boost::diagnostic_information(e) << endl;
    }
}

Из этого я получаю следующий вывод:

N5boost16exception_detail10clone_implISt9exceptionEE
Dynamic exception type: boost::exception_detail::clone_impl<std::exception>
std::exception::what: N5boost16exception_detail10clone_implISt9exceptionEE

Так в основномboost::copy_exception статически скопировал полученный аргумент.

Эта проблема решается, если я выкину свое исключениеboost::enable_current_exception вместо этого, как это.

try {
    throw boost::enable_current_exception(std::runtime_error("something"));
} catch (...) {
    ptr = boost::current_exception();
}
if (ptr) {
    try {
        boost::rethrow_exception(ptr);
    } catch (std::exception& e) {
        cout << e.what() << endl;
        cout << boost::diagnostic_information(e) << endl;
    }
}

Проблема в том, что иногда исключения генерируются библиотекой, которая не используетboost::enable_current_exception, В этом случае, есть ли способ поместить исключение вexception_ptr кроме перехвата каждого вида возможного исключения по одному и использованияboost::copy_exception на каждом?

Ответы на вопрос(1)

Ваш ответ на вопрос