Почему GetLastError () возвращает 0 или 2 в зависимости от способа вызова?

Я использую 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 () вызывается дважды, но отладка показывает, что, как и ожидалось, он вызывается ровно один раз.

Что происходит?

5
задан Ali 29 December 2011 в 18:23
поделиться