https://gcc.gnu.org/bugzilla/show_bug.cgi?id=81122
--- Comment #17 from Jonathan Wakely <redi at gcc dot gnu.org> --- For the avoidance of doubt: C++98 did not support reading hex floats from an istream. Libstdc++ still follows the C++98 spec, so does not read hex floats. "0x1" is read as "0". "0x1p1" is also read as "0". LWG 2381 is a (currently open) issue reported against the standard, saying that the standard is not clear about whether reading hex floats is supposed to work. The proposed fix is to add 'p' and 'P' to the list of atoms, and add examples making it clear what should be parsed. At this time LWG 2381 is still open. Until the proposed fix (or some other fix) is resolved by making a change to the draft standard, I do not want to change libstdc++. When the C++ committee resolves LWG 2381 I will update libstdc++ to implement the new rules.