Skip to content

Latest commit

 

History

History
35 lines (22 loc) · 1.69 KB

making_non-encodable_string_literals_ill-formed.md

File metadata and controls

35 lines (22 loc) · 1.69 KB

文字列リテラルの文字エンコーディング失敗を不適格とする [P1854R4]

  • cpp26[meta cpp]

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

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

概要

C++23では、以下のような1ワイド文字に収まらないリテラルが不適格 (コンパイルエラー) になるよう仕様変更された。

wchar_t a = L'🤦'; // C++20:OK, C++23:OK \U0001f926
wchar_t b = L'ab'; // C++20:OK, C++23:NG マルチキャラクタリテラル
wchar_t c = L'';  // C++20:OK, C++23:NG \u0065\u0301

C++26ではさらに、文字列リテラルとしてエンコーディングできない文字の扱いが実装定義でコンパイラーに任されていたものを、不適格になるよう仕様変更する。

また、マルチ文字リテラル (ひとつの文字リテラルに4文字まで入れられて値が実装定義なもの。例として'intl') については、単一のコードユニットにエンコードされるもののみ許可される。

char c = 'é'; // C++23:実装定義, C++26:NG グレイブアクセントをつけると複数のコードユニットになる

関連項目

参照