Я столкнулся со странной проблемой с исключениями с использованием 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. . все равно продолжить
ошибка файла -> исключениеЭто приложение запросило среду выполнения, чтобы завершить его необычным способом. За дополнительной информацией обращайтесь в службу поддержки приложения {{1 }} информация.
То же самое происходит и с другими исключениями (например, std :: runtime_error).
Я что-то делаю не так, или проблема в другом?
Системная информация: Windows 7 x64, последняя версия mingw32 (вчера была переустановлена с помощью mingw-get с сайта mingw.org).
Заранее большое спасибо.
Михал