The following code works with gcc 4.4.
But gcc 4.7 will give assertion failure.
#include
#include
#include
To be precise, eofbit
won't cause tellg()
to return -1
. But the fact that you read past EOF sets the failbit
, and tellg()
will return -1
if badbit
or failbit
are set.
The solution is to clear the status flags before calling tellg()
:
iss.clear();
iss.tellg(); // should work
According to C++11 section 27.7.2.3p40,
if
fail() != false
, returnspos_type(-1)
So gcc 4.7 has the correct behavior for the current version of C++ (assuming that peek()
at end of stream causes failbit
to be set, and it does during sentry construction, since skipws
is set by default).
Looking at the wording of C++03, it is the same. 27.6.1.3p37. So the behavior you describe in gcc 4.4 is a bug.