Different behavior from stringstream::operator>>() in libc++ vs libstdc++


I've encountered inconsistent behavior in this case and I'm wondering if this is a bug (either in libc++ or libstdc++) or is a situation where the c++ standard allows for implementation dependent behavior? Any comments would be appreciated! Thanks.

The attached code "read-double.cpp" contains:

#include <iostream>
#include <string>
#include <sstream>

int main()
   std::stringstream f("1.30429295CCC");
   double a;
   std::string b;

   if (!(f >> a).fail())
     std::cout << "Read double a as " << a << std::endl;
     std::cout << "unable to read double a" << std::endl;


   if (!(f >> b).fail())
     std::cout << "Read string b as " << b << std::endl;
     std::cout << "unable to read string b" << std::endl;

When compiled with g++ it outputs:

% g++ read-double.cpp
% ./a.out
Read double a as 1.30429
Read string b as CCC

When compiled with clang++ it outputs:

% clang++ read-double.cpp
% ./a.out
unable to read double a
unable to read string b

These tests were done on this machine (uname -a):

Darwin ryans-mbp-6.lan 19.6.0 Darwin Kernel Version 19.6.0: Thu Oct 29 22:56:45 PDT 2020; root:xnu-6153.141.2.2~1/RELEASE_X86_64 x86_64

with this g++ (g++ --version)
g++-10 (Homebrew GCC 10.2.0_2) 10.2.0

and this clang++ (clang++ --version)
Apple clang version 12.0.0 (clang-1200.0.32.27)
Target: x86_64-apple-darwin19.6.0
Thread model: posix
InstalledDir: /Library/Developer/CommandLineTools/usr/bin

read-double.cpp (468 Bytes)

This might be because libc++ already supports LWG 2381 and libstdc++ does not. The character 'C' is valid in a hexfloat, so should be accumulated.