Неприятный баг в libstdc++, багу уже лет 8 (нашел упоминание аж от 2004-го). И все дубликаты помечены WONTFIX. Суть бага в том что разделитель тысяч (так вроде) в русской локали суть неразрывный пробел и кодируется в UTF-8 двумя байтами (0xC2 0xA0), но на печать вылетает только первый. Строка становится некорректной и на неё ругаются все, кому не лень. Да и выглядит неаккуратно.
Есть способ обойти (без хаков вроде сброса LC_MONETARY в C)?
#include <iostream>
#include <sstream>
#include <locale>
using namespace std;
int main (void)
{
locale::global (locale (""));
int k = 1023;
stringstream ss;
ss << k;
cout << ss.str() << endl;
cout << k << endl;
}
$ ./a.out | hexdump -C
00000000 31 c2 30 32 33 0a 31 30 32 33 0a |1.023.1023.|
0000000b