странные проблемы с исключениями C ++ с mingw

Я столкнулся со странной проблемой с исключениями с использованием 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).

Заранее большое спасибо.
Михал

6
задан Michal Kaut 14 October 2011 в 09:24
поделиться