File tree Expand file tree Collapse file tree 3 files changed +41
-2
lines changed
Expand file tree Collapse file tree 3 files changed +41
-2
lines changed Original file line number Diff line number Diff line change 329329| P2996R13: [ 静的リフレクション] ( /lang/cpp26/reflection.md.nolink ) | リフレクション演算子` ^^ ` と` std::meta::info ` 型によりコンパイル時にさまざまな情報を取得できる | | | | |
330330| P1306R5: [ コンパイル時のタプルやリストを展開処理する` template for ` 文] ( /lang/cpp26/expansion_statements.md.nolink ) | クラス・タプル・Range・パラメータパックなどを展開してすべての要素をコンパイル時の処理する` template for ` 文を追加 | 16 | | | |
331331| P3533R2: [ ` constexpr ` 仮想継承を許可] ( /lang/cpp26/constexpr_virtual_inheritance.md ) | 定数式の文脈での仮想継承を許可 | 16 | | | |
332- | P2843R3: [ プリプロセッサ仕様での「未定義動作」を不適格 (診断不要) に変更] ( /lang/cpp26/preprocessing_is_never_undefined.md.nolink ) | プリプロセッサとレキサーの文脈での「未定義動作」用語を不適格 (診断不要) に変更 | 16 | | | |
332+ | P2843R3: [ プリプロセッサ仕様での「未定義動作」を不適格 (診断不要) に変更] ( /lang/cpp26/preprocessing_is_never_undefined.md ) | プリプロセッサとレキサーの文脈での「未定義動作」用語を不適格 (診断不要) に変更 | 16 | | | |
333333| P3868R1: [ モジュール宣言より前での` #line ` ディレクティブの使用を許可する] ( /lang/cpp26/allow_line_before_module_declarations.md ) | モジュール宣言より前での` #line ` ディレクティブの使用を禁止していたのは過度な制限だった | | | | |
334334
335335
Original file line number Diff line number Diff line change @@ -89,7 +89,7 @@ C++26とは、2026年中に改訂される予定の、C++バージョンの通
8989| 言語機能 | 説明 |
9090| ----------| ------|
9191| [ ファイルを読み込む` #embed ` 命令を追加] ( /lang/cpp26/embed.md ) | バイナリファイルをインクルードするメカニズム。` #include ` とちがって読み出しサイズなどの柔軟な指定ができる |
92- | [ プリプロセッサ仕様での「未定義動作」を不適格 (診断不要) に変更] ( /lang/cpp26/preprocessing_is_never_undefined.md.nolink ) | プリプロセッサとレキサーの文脈での「未定義動作」用語を不適格 (診断不要) に変更 |
92+ | [ プリプロセッサ仕様での「未定義動作」を不適格 (診断不要) に変更] ( /lang/cpp26/preprocessing_is_never_undefined.md ) | プリプロセッサとレキサーの文脈での「未定義動作」用語を不適格 (診断不要) に変更 |
9393
9494
9595### ソースコード
Original file line number Diff line number Diff line change 1+ # プリプロセッサ仕様での「未定義動作」を不適格 (診断不要) に変更 [ P2843R3]
2+ * cpp26[ meta cpp]
3+
4+ <!-- start lang caution -->
5+
6+ このページはC++26に採用される見込みの言語機能の変更を解説しています。
7+
8+ のちのC++規格でさらに変更される場合があるため[ 関連項目] ( #relative-page ) を参照してください。
9+
10+ <!-- last lang caution -->
11+
12+ ## 概要
13+ C++26では、プリプロセッサおよびレキサーの仕様において「未定義動作 (undefined behavior)」と規定されていたすべてのケースを「不適格、診断不要 (ill-formed, no diagnostic required; IFNDR)」に変更する。
14+
15+ さらに、各ケースを個別に分析し、多くのケースで診断 (コンパイルエラー) を要求するか、適格なプログラムとして受理するよう仕様を改善する。
16+
17+ 未定義動作は本来、適格なプログラムの実行時の動作に対する概念である。プリプロセッサはソースコードをコンパイル前に変換する処理であり、実行時の動作ではないため、「未定義動作」という用語は不適切であった。不適格 (診断不要) への変更は、コンパイラの振る舞いを実質的に変えるものではないが、仕様の正確性を向上させる。
18+
19+
20+ ## 変更の対象
21+
22+ 以下のプリプロセッサ機能において、従来「未定義動作」とされていた規定が変更される。
23+
24+ | 対象 | C++23までの規定 | C++26での変更 |
25+ | ------| ---------------| -------------|
26+ | ` defined ` 演算子のマクロ展開による生成 | 未定義動作 | 不適格 (診断不要) |
27+ | ` #include ` ディレクティブのマクロ展開後の不正な形式 | 未定義動作 | 不適格 (診断不要) |
28+ | マクロ引数内のプリプロセッシングディレクティブ | 未定義動作 | 不適格 (診断不要) |
29+ | ` # ` 演算子の結果が不正な文字列リテラル | 未定義動作 | 不適格 (診断不要) |
30+ | ` ## ` 演算子の結果が不正なプリプロセッシングトークン | 未定義動作 | 不適格 (診断不要) |
31+ | ` #line ` ディレクティブの不正な値 (0や2147483647超) | 未定義動作 | 不適格 |
32+ | 定義済みマクロ名の` #define ` /` #undef ` | 未定義動作 | 不適格 (診断不要) |
33+ | キーワードと同名のマクロの` #define ` | 未定義動作 | 不適格 |
34+
35+ 「不適格 (診断不要)」は、そのプログラムが規格に適合しないことを意味するが、コンパイラが診断メッセージ (エラーや警告) を出す義務はない。「不適格」は、コンパイラが診断メッセージを出す義務がある。
36+
37+
38+ ## 参照
39+ - [ P2843R3 Preprocessing is never undefined] ( https://open-std.org/jtc1/sc22/wg21/docs/papers/2025/p2843r3.pdf )
You can’t perform that action at this time.
0 commit comments