Я столкнулся со странными проблемами с исключениями при использовании mingw и смог сократить его до следующего примера:
#include <iostream>
#include <fstream>
#include <cstdlib>
using namespace std;
void test(int a) {
if (a < 0) {
throw std::ios_base::failure("a < 0");
}
}
void test_file(std::string const & fName)
{
std::ifstream inF(fName.c_str(), std::fstream::in);
if (!inF) {
cout << "file error -> throwing exception" << endl;
throw ios_base::failure("could not open input file '" + fName + "'");
}
}
int main()
{
try { test(-5); }
catch(std::exception& e) {
cerr << "Exception caught: " << e.what() << " .. continue anyway" <<endl;
}
try { test_file("file-that-does-not-exist"); }
catch(std::exception& e) {
cerr << "Exception caught: " << e.what() << endl;
exit(EXIT_FAILURE);
}
return EXIT_SUCCESS;
}
Первое исключение поймано, а второе нет, поэтому я получаю красивое окно с ошибкой Windows, сообщающее, что мое приложение перестало работать :-(
Полный вывод командной строки:
Исключение: a <0 .. все равно продолжить <br>
Ошибка файла -> исключение
Это приложение запросило среду выполнения прекратить его в
Необычный способ. Пожалуйста, свяжитесь со службой поддержки приложения для более
информация.
То же самое происходит и с другими исключениями (например, std :: runtime_error).
Я что-то не так делаю или проблема в другом месте?
Информация о системе: Windows 7 x64, последняя версия mingw32 (переустановлена вчера с помощью mingw-get с mingw.org).
Заранее большое спасибо.
Михал