Was ist das MSVC-Äquivalent für -fno-char8_t?

9

In C ++ 20 u8basieren String-Literale auf dem char8_tTyp. Sie konvertieren absichtlich nicht char const*mehr zu:

const char* str = u8"Hall\u00f6chen \u2603"; // no longer valid in C++20

Das ultimative Ziel bei der Migration auf C ++ 20 ist natürlich, das neue Verhalten vollständig zu übernehmen (im obigen Beispiel: Ändern Sie den Typ von str). Aufgrund von Bibliotheken von Drittanbietern ist dies jedoch häufig nicht sofort möglich.

Die Vorschläge, die dies einführen und "beheben", nehmen dies char8_t vorweg und erwähnen, dass es in clang und gcc das -fno-char8_tFlag gibt, um zum alten Verhalten zurückzukehren (während weiterhin andere C ++ 20-Funktionen genutzt werden können).

Der zweite Vorschlag legt die Erwartung fest, dass Microsoft folgen und ein ähnliches Flag hinzufügen wird, aber ich konnte nicht finden, wie es gesetzt werden soll (zumindest in VS 2019, Version 16.4).

Weiß also jemand, wofür das MSVC-Äquivalent -fno-char8_tist?

Tobi
quelle

Antworten:

8

Seit 16.1 gibt es das Konformitäts-Compiler-Flag /Zc:char8_t-. Das Minus weist den Compiler an , hier den Konformitätsmodus nicht zu verwenden, wenn C ++ 20 verwendet wird. Im Gegenteil, /Zc:char8_tkann verwendet werden, um es zu aktivieren.

Guillaume Racicot
quelle
1
Oh, guter Ort. Ich wollte gerade eine Antwort schreiben, die besagt, dass es keine gibt :)
Leichtigkeitsrennen im Orbit
1
@LightnessRaceswithMonica danke für das Hinzufügen der Referenz!
Guillaume Racicot
Ich dachte, ich sollte etwas beitragen : P
Leichtigkeitsrennen im Orbit
Ich habe es auch ein bisschen verbessert, da ich es wissen wollte; also sollte ich auch beitragen: P
Acorn