flush() not unformatted functionSection: 31.7.6.4 [ostream.unformatted] Status: CD1 Submitter: Martin Sebor Opened: 2006-06-14 Last modified: 2016-01-28
Priority: Not Prioritized
View all other issues in [ostream.unformatted].
View all issues with CD1 status.
Discussion:
The resolution of issue 60 changed basic_ostream::flush()
so as not  to require it to behave as  an unformatted output function.
That has at least two in my opinion problematic consequences:
        
First, flush()  now calls rdbuf()->pubsync()
unconditionally, without  regard to the  state of the stream.  I can't
think of any reason why flush() should behave differently
from the vast majority of stream functions in this respect.
        
Second, flush() is not  required to catch exceptions from
pubsync() or set  badbit in response to such
events. That doesn't seem right either, as most other stream functions
do so.
        
Proposed resolution:
I  propose  to revert  the  resolution of  issue  60  with respect  to
flush(). Specifically,  I propose to  change 27.6.2.6, p7
as follows:
        
Effects: Behaves as an  unformatted output function (as described
in 27.6.2.6, paragraph 1). If rdbuf() is not a null
pointer,  constructs a  sentry  object.  If  this object  returns
true when converted to a  value of type bool the function
calls rdbuf()->pubsync().  If that function returns
-1    calls    setstate(badbit)    (which    may    throw
ios_base::failure  (27.4.4.3)).   Otherwise, if  the
sentry object returns false, does nothing.Does
not  behave  as  an  unformatted  output  function  (as  described  in
27.6.2.6, paragraph 1).
[ Kona (2007): Proposed Disposition: Ready ]