Strumienie w GCC nie lubią setw dla obiektów string

Błąd który zgłaszałem tak dawno, że już nie pamiętam - a ciągle się "trzyma". Biblioteka standardowa dodawana do GNU C++ niepoprawnie obsługuje dyrektywę setw przy wpisywaniu do strumienia obiektów typu string.

Dla przykładu, kod

#include <iostream.h>
#include <iomanip.h>
#include <string>

int main()
{
    string text1 = "1111";
    string text2 = "2222";

    cout << "[" << setw(10) << text1 << setw(10) << text2 << "]" << endl;
}

wygeneruje

[11112222         ]

choć powinien

[      1111      2222]

(setw zostaje zastosowane przy wypisywaniu "]", stąd te spacje po dwójkach).

Obejście jest proste - starczy zamiast

        << text 

napisać

        << text.c_str()
komentarze obsługiwane przez Disqus