Я пытаюсь использовать boost::exception
и сжал мой код прототипа до примера из учебника по исключениям Boost , однако при запуске кода с макросом BOOST_THROW_EXCEPTION
я получаю прерывание из программа.
#include <iostream>
#include <boost/exception/all.hpp>
typedef boost::error_info<struct tag_my_info,int> my_info;
struct my_error: virtual boost::exception, virtual std::exception { };
void f() {
BOOST_THROW_EXCEPTION(my_error() << my_info(42));
// Uncomment the below (and comment the above) for the program to work
//throw my_error() << my_info(42);
}
int main(int argc, char** argv) {
try {
f();
}
catch(my_error& x) {
if(int const* mi = boost::get_error_info<my_info>(x)) {
std::cout << "My info: " << *mi << std::endl;
}
}
return 0;
}
Запуск кода с помощью макроса BOOST_THROW_EXCEPTION
:
* * 1010
Если, как говорится в комментарии, я поменяю код, все хорошо
$ ./a.out
My info: 42
Ниже приведен вывод препроцессора g ++ для f()
void f() {
::boost::exception_detail::throw_exception_(my_error() << my_info(42),__PRETTY_FUNCTION__,"main.cpp",14);
}
Версии программного обеспечения:
$ g++ -v
Using built-in specs.
Target: x86_64-apple-darwin10
Thread model: posix
gcc version 4.4.6 (GCC)
$ port list boost
boost @1.47.0 devel/boost
Я работаю на OSX SL, используя инструменты, предоставляемые MacPorts. Я дважды проверил пути поиска g ++, и есть только одна копия hpp-файлов boost, и они принадлежат вышеупомянутому пакету boost.
Понятия не имею, почему вызывается ловушка прерывания. Я признаю, что я новичок в C ++.