C++ 启用_GLIBCXX_调试时,Stringstream不使用双精度

C++ 启用_GLIBCXX_调试时,Stringstream不使用双精度,c++,xcode,macos,stl,C++,Xcode,Macos,Stl,我正在使用_GLIBCXX_调试模式帮助查找代码中的错误,但我遇到了一个问题,我认为这是库中的错误,但希望有人能告诉我,我只是做错了什么。下面是一个简单的例子,说明了repo的问题: #define _GLIBCXX_DEBUG #include <iostream> #include <sstream> int main (int argc, const char * argv[]) { std::ostringstream ostr; ostr &l

我正在使用_GLIBCXX_调试模式帮助查找代码中的错误,但我遇到了一个问题,我认为这是库中的错误,但希望有人能告诉我,我只是做错了什么。下面是一个简单的例子,说明了repo的问题:

#define _GLIBCXX_DEBUG
#include <iostream>
#include <sstream>

int main (int argc, const char * argv[]) {
    std::ostringstream ostr;
    ostr << 1.2;
    std::cout << "Result: " << ostr.str() << std::endl;
    return 0;
}
随着_GLIBCXX_DEBUG define的就位,输出仅为:

Result:
我一直跟踪到流的_M_num_put字段被保留为NULL,这会导致在流中抛出(并捕获)异常,并导致该数字没有输出_M_num_put应该是本地的std::num_put(我并不声称理解这应该是如何工作的,这只是我到目前为止在搜索中所学到的)

我用XCode在Mac上运行它,并用“LLVM GCC 4.2”和“Apple LLVM编译器3.0”作为编译器进行了尝试,结果相同


如果能帮我解决这个问题,我将不胜感激。我想在我的代码上继续以_GLIBCXX_DEBUG模式运行,但这会干扰我的代码。

其他人已经看到了这一点 还有

大家一致认为,这是MacOS GCC4.2中的一个已知错误,而且由于该编译器不再被更新,所以不太可能被修复


在我看来,您可以(1)使用LLVM,或者(2)构建自己的GCC并使用它。

无法使用GCC4.6.1复制。一切正常。请尝试显式刷新stringstream@sehe:刷新不起作用-问题是由于nil\M\u num\u put,数据从未被添加:(@Kerrek:感谢您尝试使用更新的编译器。从我阅读的其他评论来看,尝试在XCode中升级编译器不是很明智。我必须尽我所能进行测试,直到找到4.2下的解决方案。我尝试了g++4.3.4,但没有问题。我尝试了g++4.1.1,也没有问题。但是应用程序OSX Lion上的le的/usr/bin/llvm-g++-4.2也有同样的问题,因此在新版本中也没有修复。
Result: