Skip to content

Latest commit

 

History

History
42 lines (30 loc) · 1.44 KB

mixed_string_literal_concatenation.md

File metadata and controls

42 lines (30 loc) · 1.44 KB

異なる文字エンコーディングをもつ文字列リテラルの連結を不適格とする [P2201R1]

  • cpp23[meta cpp]

このページはC++23に採用された言語機能の変更を解説しています。

のちのC++規格でさらに変更される場合があるため関連項目を参照してください。

概要

C++20までは、実装定義の動作としてL""u8""u""U""のようなエンコーディングが混在する文字列リテラルの連結を条件付きで許可していたが、これを禁止とする。

// C++20 : 実装定義として条件付きでOK
//         (ただし主要コンパイラはサポートしていない)
// C++23 : NG
void f() {
  { auto a = L"" u""; }
  { auto a = L"" u8""; }
  { auto a = L"" U""; }

  { auto a = u8"" L""; }
  { auto a = u8"" u""; }
  { auto a = u8"" U""; }

  { auto a = u"" L""; }
  { auto a = u"" u8""; }
  { auto a = u"" U""; }

  { auto a = U"" L""; }
  { auto a = U"" u""; }
  { auto a = U"" u8""; }
}

異なるエンコーディングを混在させた文字列リテラルの連結は、ICC、GCC、Clang、MSVCのいずれもサポートしておらず、それが有用なケースは知られていなかったため禁止する。

参照