У меня есть этот метод в библиотеке:
#include <stdexcept>
mytype* myfunc()
{
throw std::runtime_error("is uncatchable");
}
и это в int main()
исполняемого процесса, который связывает библиотеку.
try { myfunc(); }
catch(std::exception const& ex) { std::cout << "handled: " << ex.what() << std::endl; }
catch(...) { std::cout << "something else..." << std::endl; }
И это вывод:
terminate called after throwing an instance of 'std::runtime_error'
what(): is uncatchable
Abort (core dumped)
Вопрос:
Почему исключение не было поймано?
Я не управляю флагами моего компилятора (icc-11.X), также ОС не находится под моим контролем.
Список флагов компилятора:
-DLINUX -DLINUX_X64 -DGNU_SOURCE -fPIC -Wcheck -Wshadow -Wdeprecated -Wreturn-type -Wcomment -Wmissing-prototypes -Wp64 -Drcsid="__attribute__((used)) rcsid"
-D__EXTENSIONS__ -D__STD_C__ -D_XOPEN_SOURCE=500 -D_GNU_SOURCE -DNDEBUG
__EXCEPTIONS
определено.
Могут ли существовать настройки для Linux, которые приводят к этому?
Могут ли существовать настройки для компилятора, которые приводят к этому?