Вчера я обнаружил странную ошибку в довольно простом коде, который в основном получает текст из ifstream и токенизирует его. Код, который на самом деле не работает, выполняет несколько вызовов get () / peek () в поисках токена "/ *". Если токен найден в потоке, вызывается unget (), поэтому следующий метод видит поток, начинающийся с токена.
Иногда, казалось бы, в зависимости только от длины файла, вызов unget () терпит неудачу. Внутри он вызывает pbackfail (), который затем возвращает EOF. Однако после очистки состояния потока я с радостью могу прочитать больше символов, так что это не совсем EOF ..
После того, как я покопался, вот полный код, который легко воспроизводит проблему: Проблем не обнаружено при тестировании с gcc4.4.5 в 64-битной системе Debian.
Вопросы: