То есть реализация определена. Стандартный C ++ абсолютно ничего не говорит о многопоточности, и поэтому любые предположения о потоках по своей природе вызывают неуказанное или определяемое реализацией поведение.
Нам нужна более конкретная платформа, которую вы используете, но, вероятно, нецелесообразно предполагать, является ли поток потокобезопасным или свободным от блокировок. Если ничего другого, то, вероятно, в вызовах уровня ОС участвуют блокировки, которые фактически выполняют чтение из файла, и в этом случае настоящая реализация без блокировок невозможна. Даже без этого каждое чтение из потока if должно проверять несколько флагов формата и обновлять биты флагов в зависимости от того, что происходит во время чтения. (т. е. istream::good()
и istream::operator bool
) Так как все это не может быть выполнено атомарно, нецелесообразно много полагаться на характеристики безопасности потоков istream
.