Verpflichtet der C ++ - Standard eine Kodierung für wchar_t?

Hier sind einige Auszüge aus meiner Kopie des Normentwurfs N4140 von 2014

22.5 Standard-Codekonvertierungsfacetten [locale.stdcvt]

3 Für jede der drei Codeumwandlungsfacettencodecvt_utf8, codecvt_utf16, undcodecvt_utf8_utf16:
(3.1) -Elem ist der Breitzeichentyp, z. B.wchar_t, char16_t, oderchar32_t.

4 Für die Facettecodecvt_utf8:
(4.1) - Die Facette soll zwischen UTF-8-Multibyte-Sequenzen und UCS2 oder UCS4 konvertieren (abhängig von der Größe vonElem) innerhalb des Programms.

Eine Interpretation dieser beiden Absätze ist, dasswchar_t muss entweder als UCS2 oder UCS4 codiert sein. Ich mag es nicht sehr, denn wenn es wahr ist, haben wir eine wichtige Eigenschaft der Sprache, die tief in einer Bibliotheksbeschreibung vergraben ist. Ich habe versucht, eine direktere Aussage über diese Eigenschaft zu finden, aber ohne Erfolg.

Eine andere Interpretation, diewchar_tie @ -Codierung muss weder UCS2 noch UCS4 sein. Bei Implementierungen, bei denen dies nicht der Fall ist, musscodecvt_utf8 funktioniert nicht fürwchar_t. Ich mag diese Interpretation auch nicht sehr, denn wenn es wahr ist, und auch nichtchar Nochwchar_t native Kodierungen sind Unicode. Es scheint keine Möglichkeit zu geben, diese nativen Kodierungen portabel in Unicode umzuwandeln.

Welche der beiden Interpretationen ist richtig? Gibt es eine andere, die ich übersehen habe?

Klärun Ich frage nicht nach allgemeinen Meinungen über die Eignung vonwchar_t für Softwareentwicklung oder Eigenschaften vonwchar_t kann man von woanders ableiten. Ich bin interessiertin diesen beiden spezifischen Absätzen des Standards. Ich versuche zu verstehen, wasdiese spezifischen Absätze mit sich bringen oder nicht mit sich bringen.

Erklärung 2. Wenn 4.1 besagt "Die Facette soll zwischen UTF-8-Multibyte-Sequenzen und UCS2 oder UCS4 konvertierenoder welche Codierung auch immer wchar_t vom aktuellen globalen Gebietsschema auferlegt wird "Es würde kein Problem geben. Es tut es nicht. Es sagt, was es sagt. Es scheint, dass, wenn man @ verwendstd::codecvt_utf8<wchar_t>, man endet mit einem Haufen vonwchar_t unabhängig vom aktuellen globalen Gebietsschema als UCS2 oder UCS4 codiert. (Es gibt keine Möglichkeit, ein Gebietsschema oder eine Zeichenkonvertierungsfacette für @ anzugebecodecvt_utf8). Die Frage kann also folgendermaßen umformuliert werden: Kann das Konvertierungsergebnis direkt mit dem aktuellen globalen Gebietsschema (und / oder mit einem möglichen Gebietsschema) für die Ausgabe verwendet werden,wctype Abfragen und so weiter? Wenn nicht, was ist es nutzbarzu? (Wenn die zweite Interpretation oben richtig ist, scheint die Antwort "nichts" zu sein.)

Antworten auf die Frage(14)

Ihre Antwort auf die Frage