Это - http://pastebin.com/YX2BB9yF - кусок неверной программы для таски с прошлого CF, но речь не об этом. А речь о том, что VSE 2010 в debug и release модах выдаёт соответственно 4 и 2. Кэп подсказывает, что где-то там память повредилась, что-то куда вылезло и т.п. Впрочем, где я с памятью плохо работаю, я так и не нашёл и уже даже думаю, что не в этом дело.
Вот некоторые особенности этой программы:
1) раскомменчивание строк 43-45 выдаёт 4 стабильно во всех случаях.
2) В GNU при компиляции без параметров и с параметрами -O3 выдаёт всегда 4.
3) Есть подозрение, что это всё строчки 67 - 70: они повергают компилятор в шок и из-за этого он что-то неверно оптимизирует.
В общем, если кто знает-таки в чём дело, тому печенька...
Ну до сих пор у меня много раз былие такие случаи, и да, то где-то что-то не проиницилизировано нормально, то выход за пределы массива. Здесь же всё-таки не наблюдается ни того, ни другого.
А если то, что должно свернуться в ++len, явно заменить на ++len, то ответ вообще 1. Явно что-то мутное.
Ну я и так уже постарался его привести к более-менее компактному виду. Проблема в том, что удаление почти любого куска кода уже приводит к нормальному результату. (Впрочем, как и добавление какой-нибудь строчки вида if (false) cout << "hello" << endl;)
В общем ладно, не так это важно. Спасибо за помощь.