Я использую mingw g ++ 4.6.1 с -O0, WinXP SP2.
Минимальный рабочий пример здесь.
g ++ настроен с помощью --disable-sjlj-exceptions --with-dwarf2.
GetLastError ()
возвращает 0 или 2 в зависимости от того, как возникло исключение:
throw runtime_error(error_message());
фиктивный «код ошибки: 0» печатается, а
const string msg = error_message();
throw runtime_error(msg);
печатает «код ошибки: 2», как ожидалось.
Сначала я подумал, что GetLastError ()
вызывается дважды, но отладка показывает, что, как и ожидалось, он вызывается ровно один раз.
Что происходит?