ifstream :: unget () не работает. Есть ли в реализации MS ошибки или мой код ошибочен?

Вчера я обнаружил странную ошибку в довольно простом коде, который в основном получает текст из ifstream и токенизирует его. Код, который на самом деле не работает, выполняет несколько вызовов get () / peek () в поисках токена "/ *". Если токен найден в потоке, вызывается unget (), поэтому следующий метод видит поток, начинающийся с токена.

Иногда, казалось бы, в зависимости только от длины файла, вызов unget () терпит неудачу. Внутри он вызывает pbackfail (), который затем возвращает EOF. Однако после очистки состояния потока я с радостью могу прочитать больше символов, так что это не совсем EOF ..

После того, как я покопался, вот полный код, который легко воспроизводит проблему: Проблем не обнаружено при тестировании с gcc4.4.5 в 64-битной системе Debian.

Вопросы:

  1. могут ли другие люди протестировать это? Я был бы очень признателен за активную форму сотрудничества SO.
  2. есть ли что-нибудь , что неверно в коде, что может вызвать проблему (не говоря уже о том, имеет ли это смысл)
  3. или какие-либо флаги компилятора что может вызвать такое поведение?
  4. Весь код парсера довольно критичен для приложения и тщательно тестируется, но, конечно, эта проблема не была обнаружена в тестовом коде. Следует ли мне придумывать экстремальные тестовые примеры, и если да, то как мне это сделать? Как я мог предсказать, что это может вызвать проблему?
  5. Если это действительно ошибка, где мне лучше всего сообщить о ней?
5
задан stijn 29 September 2010 в 09:41
поделиться