No function described in [input.output] except for
ios_base::imbue
and basic_filebuf::pubimbue
causes any instance of
basic_ios::imbue
or
basic_streambuf::imbue
to be called.
If any user function called from a function declared in [input.output] or
as an overriding virtual function of any class declared in [input.output]
calls
imbue,
the behavior is undefined.
The classes of [input.output] with template arguments
charT
and
traits
behave as described if
traits::pos_type
and
traits::off_type
are
streampos
and
streamoff
respectively.
Except as noted explicitly below, their behavior when
traits::pos_type
and
traits::off_type
are other types is
implementation-defined.
In the classes of [input.output], a template parameter with name
charT represents a member of the set of types containing char, wchar_t,
and any other implementation-defined
character types that meet the requirements for a character on which any of
the iostream components can be instantiated.
If one thread makes a library call a that writes a value to a stream
and, as a result, another thread reads this value from the stream through a
library call b such that this does not result in a data race, then
a's write synchronizes with
b's read.