[edit]Requirements
AUnformattedOutputFunction is a stream output function that performs the following:
1) Constructs an object of type
basic_ostream::sentry with automatic storage duration, which performs the following:
- Ifeofbit orbadbit are set on the output stream, sets thefailbit as well, and if exceptions on
failbit are enabled in this output stream'sexception mask ((exceptions()& failbit)!=0), throwsios_base::failure. - Flushes the tie()'d output stream, if applicable.
2) Checks the status of the sentry by calling
sentry::operator bool(), which is equivalent to
basic_ios::good.
- If the operator returnsfalse or sentry's constructor throws an exception, no output takes place.
- If the operator returnstrue, attempts to perform the desired output by inserting the characters into the output stream as if by callingrdbuf()->sputc(). Other public members ofstd::basic_ostream may also be used, but virtual members ofrdbuf() exceptoverflow(),xsputn() andsync() will never be called.
- If an exception is thrown during output, sets
badbit in the output stream. If exceptions onbadbit are enabled in this stream'sexception mask ((exceptions()& badbit)!=0), the exception is also rethrown. - If no exception was thrown, returns the value specified by the function.
3) In any event, whether terminating by exception or returning, the sentry's destructor is called before leaving this function.
[edit]Standard library
The following standard library functions areUnformattedOutputFunctions.
[edit]Defect reports
The following behavior-changing defect reports were applied retroactively to previously published C++ standards.
| DR | Applied to | Behavior as published | Correct behavior |
|---|
| LWG 63 | C++98 | the exception-handling policy was missing | added |
| LWG 160 | C++98 | the process of determining whether the exception caught is rethrown mentioned a non-existing functionexception() | corrected toexceptions() |
| LWG 165 | C++98 | the only virtual member allowed to be called onrdbuf() wasoverflow() | also allowed
xsputn() andsync() |