When reading malformed floats like "3.14e" using operator>>, it appears like the e character is removed from the input stream but the fact that the stream state does not signal that something went wrong.
$ cat lcast.cpp #include <sstream> #include <iostream> using namespace std; int main() { stringstream buf; buf.str("1e"); float r; buf >> r; cout << "float==" << r << endl; cout << "tellg()==" << buf.tellg() << endl; cout << "fail()==" << buf.fail() << endl; } $ g++ lcast.cpp && ./a.out float==1 tellg()==2 fail()==0 This was noticed in the context of the boost library. There, boost::lexical_cast<float>("1e") silently return 1.0, which is surprising. E.g. a compiler would reject float x = 1e saying "exponent has no digits" or something along these lines. -- Summary: Problem reading floats with exponent marker but no exponent Product: gcc Version: 4.2.0 Status: UNCONFIRMED Severity: normal Priority: P3 Component: libstdc++ AssignedTo: unassigned at gcc dot gnu dot org ReportedBy: kreckel at ginac dot de GCC build triplet: x86_64-suse-linux GCC host triplet: x86_64-suse-linux GCC target triplet: x86_64-suse-linux http://gcc.gnu.org/bugzilla/show_bug.cgi?id=32422