Discrepancia entre el operador de istream >> (double & val) entre libc ++ y libstdc ++

Con mi reciente actualización a Mac OS X 10.9, la biblioteca estándar predeterminada de C ++ cambió de libstdc ++ a libc ++. Desde entonces observo un comportamiento inesperado del operador de cadena de caracteres >> (doble) documentado en el siguiente ejemplo de código.

En resumen, el libc ++ parece tener problemas con la extracción de valores dobles de stringstreams cuando el valor doble es seguido por una letra.

Ya verifiqué el estándar (2003) pero no puedo encontrar ninguna información específica si la extracción debería funcionar en este caso o no.

Por lo tanto, agradecería cualquier entrada si este es un error en libc ++ o libstdc ++.

#include <sstream>
#include <iostream>

using namespace std;

void extract_double(const string & s)
{
  stringstream ss;
  double d;

  ss << s;
  ss >> d;
  if(!ss.fail())
    cout << "'" << ss.str() << "' converted to " << d << endl;
  else
    cout << "'" << ss.str() << "' failed to convert to double" << endl;
}

int main()
{
  extract_double("-4.9");
  extract_double("-4.9 X");
  extract_double("-4.9_");
  extract_double("-4.9d");
  extract_double("-4.9X");
}

Compilando el código conc++ --stdlib=libc++ streamtest.cxx da

'-4.9' converted to -4.9
'-4.9 X' converted to -4.9
'-4.9_' converted to -4.9
'-4.9d' failed to convert to double
'-4.9X' failed to convert to double

Compilando el código conc++ --stdlib=libstdc++ streamtest.cxx da

'-4.9' converted to -4.9
'-4.9 X' converted to -4.9
'-4.9_' converted to -4.9
'-4.9d' converted to -4.9
'-4.9X' converted to -4.9

La versión del compilador es

$ c++ --version
Apple LLVM version 5.0 (clang-500.2.79) (based on LLVM 3.3svn)
Target: x86_64-apple-darwin13.0.0
Thread model: posix

Respuestas a la pregunta(1)

Su respuesta a la pregunta