Stringstream не работает с двойными числами, когда _GLIBCXX_DEBUG включен - PullRequest
5 голосов
/ 02 октября 2011

Я использую режим _GLIBCXX_DEBUG, чтобы помочь найти ошибки в моем коде, но у меня возникла проблема, которая, на мой взгляд, является ошибкой в ​​библиотеке, но, надеюсь, кто-то может сказать мне, что я просто что-то делаю не так. Вот короткий пример, в котором проблема с репро:

#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;
}

Если я закомментирую #define, то результат (как и ожидалось):

Result: 1.2

С определением _GLIBCXX_DEBUG, однако, вывод просто:

Result:

Я проследил это до поля _M_num_put потока, оставляемого как NULL, что вызывает исключение (и перехват) в потоке и не приводит к выводу числа. Предполагается, что _M_num_put - это std :: num_put из локали (я не претендую на то, чтобы понять, как это должно работать, это только то, что я узнал в своем поиске до сих пор).

Я запускаю его на Mac с XCode и пробовал использовать как LLVM GCC 4.2, так и Apple LLVM Compiler 3.0 в качестве компилятора с теми же результатами.

Буду признателен за любую помощь в решении этого. Я хочу продолжить работу с режимом _GLIBCXX_DEBUG в моем коде, но это мешает этому.

1 Ответ

3 голосов
/ 10 ноября 2011

Кто-то еще видел это на cplusplus.com и здесь, также в stackoverflow .

Консенсус в том, что это известная ошибка в gcc 4.2 дляMac OS, и поскольку этот компилятор больше не обновляется, его вряд ли когда-либо исправят.

Мне кажется, что вы можете (1) использовать LLVM или (2) создать свой собственный GCC и использоватьэто.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...