РЕДАКТИРОВАТЬ: РАЗРЕШЕНО. Проблема была гораздо более мягкой - у меня было две функции, которые вызывались внутри друг друга в одной строке кода - обе использовали lexical_cast
, а , другая , одна из них вызывала сбой. Интересно, что мне удалось выяснить это только путем разбрызгивания большого количества cout
, поскольку не было никакого обратного следа при сбое, и когда отладка строки была строкой, gdb по какой-то причине указывал неправильный lexical_cast
как виновника (а другой я не видел, вздыхаю). Спасибо за помощь!
Я использую gcc 4.1.2 и boost 1.48. У меня есть следующий код в общей библиотеке внутри функции шаблона:
try {
boost::lexical_cast<T>(s);
}
catch (...) {
std::cout << "Caught it" << std::endl;
throw;
}
Приведение завершается неудачно, но исключение не перехватывается ( выполняет распространение и завершение программы, но это предложение catch не перехватывает его). T
- это long
, а s
- это std::string
, равное "234a234"
. (Я также попытался обернуть надстройку над бустом в #pragma GCC visibility push(default)
, а также попытался добавить флаг -shared-libgcc
при компоновке, но ничего не получилось.)
Становится лучше, хотя. В следующих двух случаях исключение попадает в ловушку:
try {
throw boost::bad_lexical_cast();
}
catch (...) {
std::cout << "Caught it" << std::endl;
throw;
}
и удивительно этот:
try {
boost::lexical_cast<T>(s);
throw boost::bad_lexical_cast();
}
catch (...) {
std::cout << "Caught it" << std::endl;
throw;
}
Есть идеи о том, что происходит и, что более важно, как это исправить?