30 Input/output library [input.output]

30.2 Iostreams requirements [iostreams.requirements]

30.2.1 Imbue limitations [iostream.limits.imbue]

Никакая функция, описанная в Пункте, не описана, [input.output] за исключением ios_­base​::​imbue и basic_­filebuf​::​pubimbue вызывает любой экземпляр basic_­ios​::​imbue или basic_­streambuf​::​imbue для вызова. Если какая-либо пользовательская функция вызывается из функции, объявленной в Clause, [input.output] или как замещающая виртуальная функция любого класса, объявленного в Clause, [input.output]вызывается imbue, поведение не определено.

30.2.2 Positioning type limitations [iostreams.limits.pos]

Классы Clause [input.output] с аргументами шаблона charT и traits ведут себя, как описано, если traits​::​pos_­type и traits​::​off_­type есть streampos и streamoff соответственно. За исключением случаев, явно указанных ниже, их поведение, когда traits​::​pos_­type и traits​::​off_­type являются другими типами, определяется реализацией.

В классах пункта [input.output], параметр шаблона с именем charT представляет собой элемент из набора типов , содержащих char, wchar_­tи любых других реализации определенных типов символов , которые удовлетворяют требования , предъявляемые к характеру , на которых любые из компонентов iostream может быть реализованным.

30.2.3 Thread safety [iostreams.threadsafety]

Одновременный доступ к объекту потока ([string.streams], [file.streams]), объекту буфера потока ([stream.buffers]) или потоку библиотеки C ([c.files]) несколькими потоками может привести к гонке данных ([intro.multithread]), если не указано иное ([iostream.objects]). [ Note: Гонки данных приводят к неопределенному поведению ([intro.multithread]). ] end note

Если один поток делает вызов библиотеки , a которая записывает значение потока и, как следствие, другой поток считывает это значение из потока через библиотеку вызова b таким образом, что это не приведет к гонке данных, а затем a«s синхронизирует запись с b» прочитал.