This page is a snapshot from the LWG issues list, see the Library Active Issues List for more information and the meaning of C++14 status.
Section: 31.7.6.2.5 [ostream.seeks] Status: C++14 Submitter: Marshall Clow Opened: 2013-10-21 Last modified: 2017-07-05
Priority: 0
View all issues with C++14 status.
Discussion:
In 31.7.6.2.5 [ostream.seeks], we have:
basic_ostream<charT,traits>& seekp(pos_type pos);-3- Effects: If fail() != true, executes rdbuf()->pubseekpos(pos, ios_base::out). In case of failure, the function calls setstate(failbit) (which may throw ios_base::failure).
-4- Returns: *this.
basic_ostream<charT,traits>& seekp(off_type off, ios_base::seekdir dir);-5- Effects: If fail() != true, executes rdbuf()->pubseekoff(off, dir, ios_base::out).
-6- Returns: *this.
The first call is required to set the failbit on failure, but the second is not
So (given two ostreams, os1 and os2) the following code (confusingly) works:os1.seekp(-1); assert(os1.fail()); os2.seekp(-1, std::ios_base::beg); assert(os2.good());
Note that the description of basic_istream<charT,traits>& seekg(off_type off, ios_base::seekdir dir) in 31.7.5.4 [istream.unformatted] p43 does require setting failbit.
[Issaquah 2014-02-11: Move to Immediate]
Proposed resolution:
This wording is relative to N3797.
Modify 31.7.6.2.5 [ostream.seeks]p5 as indicated:
basic_ostream<charT,traits>& seekp(off_type off, ios_base::seekdir dir);-5- Effects: If fail() != true, executes rdbuf()->pubseekoff(off, dir, ios_base::out). In case of failure, the function calls setstate(failbit) (which may throw ios_base::failure).
-6- Returns: *this.