BOOST_THROW_EXCEPTION вызывает прерывание прерывания - PullRequest
2 голосов
/ 24 ноября 2011

Я пытаюсь использовать 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 ++.

1 Ответ

0 голосов
/ 04 декабря 2011

Проблема была вызвана использованием версии g ++ для MacPorts.В системе MP имеется множество заявок, связанных с исключениями и прерываниями прерываний (и множество примеров в Google).

Использование версии g ++, поставляемой с XCode, позволило решить эту проблему.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...