This is the mail archive of the
gcc-bugs@gcc.gnu.org
mailing list for the GCC project.
[Bug c++/45442] New: std::operator>> discards appropriate floating-point values (Inf, -Inf, NaN)
- From: "eric dot buchlin at ias dot u-psud dot fr" <gcc-bugzilla at gcc dot gnu dot org>
- To: gcc-bugs at gcc dot gnu dot org
- Date: 29 Aug 2010 10:04:10 -0000
- Subject: [Bug c++/45442] New: std::operator>> discards appropriate floating-point values (Inf, -Inf, NaN)
- Reply-to: gcc-bugzilla at gcc dot gnu dot org
The following code
-----
#include <limits>
#include <iostream>
int main () {
double a = std::numeric_limits<double>::infinity();
double b = -1;
std::cout << a << std::endl;
std::cin >> b;
std::cout << " " << b << " " << std::cin.fail() << std::endl;
return 0;
}
-----
outputs
-----
inf
0 1
-----
when the user types inf<return>, while one could expect
-----
inf
inf 0
-----
The same kind of behavior happens for -inf and nan.
I know that this is implementation-defined, and as such it is an acceptable
behavior, but it would be nice if << and >> could be more symmetric.
I don't know what conversion functions exactly are called by >>, but the
__convert_to_v() functions in libstdc++-v3/config/locale/gnu/c_locale.cc
contain lines like:
else if (__v == numeric_limits<double>::infinity())
{
__v = numeric_limits<double>::max();
__err = ios_base::failbit;
}
[this condition is not the one run by the above-mentioned code, as we get a
value 0 instead of numeric_limits<double>::max(), but you get the idea]
It seems strange that these perfectly appropriate floating-point values that
can be given by strtod are discarded for no apparent reason.
--
Summary: std::operator>> discards appropriate floating-point
values (Inf, -Inf, NaN)
Product: gcc
Version: 4.4.4
Status: UNCONFIRMED
Severity: enhancement
Priority: P3
Component: c++
AssignedTo: unassigned at gcc dot gnu dot org
ReportedBy: eric dot buchlin at ias dot u-psud dot fr
http://gcc.gnu.org/bugzilla/show_bug.cgi?id=45442