Dies funktioniert wie erwartet mit libstdc ++ (sowohl gcc als auch clang), aber druckt nur das erste Zeichen (das zufälligerweise ASCII ist) mit libc ++. Ich benutze libcxx-0.0_p20140322 unter Gentoo Linux.
Ist das ein bekannter Fehler in libc ++ oder weiß ich nicht, wie ich ihn kochen soll?
Update 1. Ich habe es versucht
%Vor%die alle dasselbe machen.
Update 2. Das breite String-Literal ist hier der Einfachheit halber. Das gleiche passiert, wenn die Zeichenfolge auf andere Weise erhalten wird (konvertiert von UTF-8, gelesen aus einer Binärdatei, ...)
Sie müssen den Ausgabestream explizit mit einem Gebietsschema versehen, etwa so:
%Vor%Damit funktionieren die Dinge wie erwartet. In der Tat ist es erforderlich durch den Standard:
27.5.3.3 ios_base-Funktionen
%Vor%4 Wenn kein Gebietsschema eingegeben wurde, eine Kopie des globalen C ++ - Gebietsschemas locale (), gültig zum Zeitpunkt der Erstellung.
Wenn also wcout
erstellt wird, erhält es eine Kopie der ursprünglichen Locale, die darin enthalten ist. Das anfängliche Gebietsschema ist "C". Meine falsche Annahme war, dass Streams, die kein Gebietsschema explizit durchtränkt haben, immer das aktuelle globale Gebietsschema verwenden (und nicht nur zum Zeitpunkt der Konstruktion). Diese Annahme ist völlig unvernünftig, wenn man ein wenig darüber nachdenkt.