[Bug libstdc++/37958] New: num_get<>::do_get(bool) sets eofbit flag incorrectly when boolalpha == true
tsyvarev at ispras dot ru
gcc-bugzilla@gcc.gnu.org
Thu Oct 30 15:01:00 GMT 2008
There are some examples in the description of member function of the num_get<>
facet
iter_type do_get(iter_type in, iter_type end, ios_base& str, ios_base::iostate&
err, bool& val) const
for the case when (str.flags() & ios_base::boolalpha) != 0, that clarify the
algorithm that the function implements (22.2.2.1.2, p16):
For targets true: "1" and false: "0", the input sequence "1" yields val == true
and err == str.goodbit. For empty targets (""), any input sequence yields err
==
str.failbit.
But in both cases implementation also sets flag str.eofbit in err.
It seems that implementation always set str.eofbit when after call of the
function (in == end).
But standard states(22.2.2.1.2, p16) that this flag should be set only when:
"if, when seeking another character to match, it is found that (in == end)" (on
success)
or "if the reason for the failure was that (in == end)" (on fail)
This conditions are not the same as simply (in == end).
Short test reproduce this difference for targets "true" and "false" and input
sequence "true" (similar to the first example):
test.cpp:
#include <iostream>
#include <sstream>
using namespace std;
int main()
{
istringstream is("true");
bool result;
is >> boolalpha >> result;
if(is.rdstate() & ios_base::eofbit)
cout << "eofbit was set." << endl;
else
cout << "eofbit wasn't set." << endl;
return 0;
}
andrew@Ubuntu:/mnt/hgfs/shared/temp/test$ g++ test.cpp && ./a.out
eofbit was set.
andrew@Ubuntu:/mnt/hgfs/shared/temp/test$ g++ --version
g++ (GCC) 4.1.2 (Ubuntu 4.1.2-0ubuntu4)
Copyright (C) 2006 Free Software Foundation, Inc.
This is free software; see the source for copying conditions. There is NO
warranty; not even for MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.
The detailed bug description can be found at:
http://linuxtesting.org/results/report?num=S0735
--
Summary: num_get<>::do_get(bool) sets eofbit flag incorrectly
when boolalpha == true
Product: gcc
Version: unknown
Status: UNCONFIRMED
Severity: normal
Priority: P3
Component: libstdc++
AssignedTo: unassigned at gcc dot gnu dot org
ReportedBy: tsyvarev at ispras dot ru
http://gcc.gnu.org/bugzilla/show_bug.cgi?id=37958
More information about the Gcc-bugs
mailing list