Возникли проблемы при создании исключения с использованием Boost.Exception. 8444950934950830985903859380958309850938905839859080985098940689089689028
class BOOST_SYMBOL_VISIBLE base_exception : virtual public std::exception, virtual public boost::exception
{
public:
base_exception()
: std::exception(),
boost::exception(),
context_(0)
{
}
base_exception(const char* context)
: std::exception(),
boost::exception(),
context_(context)
{
}
virtual ~base_exception() BOOST_NOEXCEPT_OR_NOTHROW
{
}
protected:
const char* context_;
};
class BOOST_SYMBOL_VISIBLE my_exception : public virtual base_exception
{
public:
my_exception(const char* context)
: base_exception(context)
{
}
my_exception(const my_exception& other)
: base_exception(other)
{
}
virtual char const* what() const BOOST_NOEXCEPT_OR_NOTHROW
{
return "my exception";
}
virtual ~my_exception() BOOST_NOEXCEPT_OR_NOTHROW
{
}
};
BOOST_NORETURN void throw_exception(const base_exception& ex)
{
BOOST_THROW_EXCEPTION(ex << boost::errinfo_api_function("api_1"));
}
BOOST_NORETURN void throw_exception(const my_exception& ex)
{
BOOST_THROW_EXCEPTION(ex << boost::errinfo_api_function("api_2"));
}
int main(void) {
try{
throw_exception(my_exception("context"));
}catch(...)
{
cerr << boost::current_exception_diagnostic_information();
}
return 0;
}
Результатом этой программы будет:
Throw location unknown (consider using BOOST_THROW_EXCEPTION)
Dynamic exception type: boost::wrapexcept<my_exception>
std::exception::what: my exception
Но если изменить это исключение my_exception * base_exception
.../main.cpp(59): Throw in function void throw_exception(const base_exception &)
Dynamic exception type: boost::wrapexcept<base_exception>
std::exception::what: std::exception
[boost::errinfo_api_function_*] = api_1
BST, BOOX, EXT, B0000 * * * BST *, 10000 *
BST, 10000 * * BST, 10000 * BST причина исключения? Как исправить этот код?