Я только что попробовал это в VS2008 на Windows XP и получил предупреждение о переполнении буфера, как на VS2008 до, так и после SP1.
Интересно, что проблема заключается в передаче строки в do_stuff либо по ссылке, либо по значению - если я использую оригинальный код, он жалуется на переполнение буфера, но если я передаю строку в значении , работает нормально. Это с многопоточной средой выполнения DLL отладки. Ошибка исчезает, если вам нравится статическая среда выполнения MT Debug.
В обоих случаях предварительно скомпилированные заголовки были отключены, а файлы, которые обычно генерируют предварительно скомпилированные заголовки, были удалены из проекта.
После прочтения этой статьи на MSDN Мне интересно, не связана ли эта проблема с тем фактом, что несколько классов стандартной библиотеки C ++ на самом деле находятся в библиотеке времени выполнения, если вы строите с помощью отладочной DLL-библиотеки (просто связать сгенерированный VS2008 двоичный файл с более ранней библиотекой и следить за нерешенными внешними данными, чтобы подтвердить это).