Skip to content

Commit 57d9fce

Browse files
committed
C++26: 「モジュール宣言でのモジュール名のマクロ展開を禁止する」を追加 (close #1325)
1 parent 3c66609 commit 57d9fce

File tree

4 files changed

+44
-3
lines changed

4 files changed

+44
-3
lines changed

implementation-status.md

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -304,7 +304,7 @@
304304
| P2748R5: [返却された左辺値から暗黙変換された一時オブジェクトが参照に束縛されることを禁止する](/lang/cpp26/disallow_binding_a_returned_glvalue_to_a_temporary.md.nolink) | 寿命切れの変数によって引き起こされるバグを防止する | 14 | 19 | | |
305305
| P3106R1: [要素数不明の配列を集成体初期化する規則を明確化](/lang/cpp26/clarifying_rules_for_brace_elision_in_aggregate_initialization.md.nolink) | 配列要素の集成体初期化で`{}`が省略された場合の矛盾していた規定を修正 | yes | 17 | | |
306306
| P0609R3: [構造化束縛への属性を許可](/lang/cpp26/attributes_for_structured_bindings.md) | `auto [a, b [[maybe_unused]], c] = f();`のように構造化束縛の要素に対して属性を付加できるようにする | 15 | 19 | | |
307-
| P3034R1: [モジュール宣言でのモジュール名のマクロ展開を禁止する](/lang/cpp26/module_declarations_shouldnt_be_macros.md.nolink) | `export module MACRO_NAME;`を禁止 | | | | |
307+
| P3034R1: [モジュール宣言でのモジュール名のマクロ展開を禁止する](/lang/cpp26/module_declarations_shouldnt_be_macros.md) | `export module MACRO_NAME;`を禁止 | | | | |
308308
| P2809R3: [空の無限ループは未定義動作ではないと規定](/lang/cpp26/trivial_infinite_loops_are_not_undefined_behavior.md) | 並行プログラムの進行保証などを考慮して空の無限ループを未定義動作ではないものとする | 14 | 19 | | |
309309
| P2795R5: [未初期化変数の読み取りをエラー性動作とする](/lang/cpp26/erroneous_behavior_for_uninitialized_reads.md) | 初期化されていない自動変数の読み取りの安全性を規定する | | | | |
310310
| P2573R2: [関数宣言を削除する理由を指定できるようにする](/lang/cpp26/delete_reason.md) | `f() = delete("reason");` | 15 | 19 | | |

lang/cpp20/modules.md

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -490,6 +490,7 @@ int main() {
490490

491491
## <a id="relative-page" href="#relative-page">関連項目</a>
492492
- [C++23 無意味なexport宣言を禁止する](/lang/cpp23/meaningful_exports.md)
493+
- [C++26 モジュール宣言でのモジュール名のマクロ展開を禁止する](/lang/cpp26/module_declarations_shouldnt_be_macros.md)
493494

494495

495496
## 参照
@@ -504,4 +505,4 @@ Standard library header units for C++20](http://www.open-std.org/jtc1/sc22/wg21/
504505
Mitigating minor modules maladies](http://www.open-std.org/jtc1/sc22/wg21/docs/papers/2019/p1766r1.html)
505506
- [P1811R0
506507
Relaxing redefinition restrictions for re-exportation robustness](http://www.open-std.org/jtc1/sc22/wg21/docs/papers/2019/p1811r0.html#problem)
507-
同時に到達可能とならなければODR違反にならないという仕様が削除された。また、インポータブルヘッダーの`#include``import`に置き換えるかは処理系定義となった。
508+
同時に到達可能とならなければODR違反にならないという仕様が削除された。また、インポータブルヘッダーの`#include``import`に置き換えるかは処理系定義となった。

lang/cpp26.md

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -102,7 +102,7 @@ C++26とは、2026年中に改訂される予定の、C++バージョンの通
102102

103103
| 言語機能 | 説明 |
104104
|----------|------|
105-
| [モジュール宣言でのモジュール名のマクロ展開を禁止する](/lang/cpp26/module_declarations_shouldnt_be_macros.md.nolink) | `export module MACRO_NAME;`を禁止 |
105+
| [モジュール宣言でのモジュール名のマクロ展開を禁止する](/lang/cpp26/module_declarations_shouldnt_be_macros.md) | `export module MACRO_NAME;`を禁止 |
106106

107107

108108
### 機能の非推奨化
Lines changed: 40 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,40 @@
1+
# モジュール宣言でのモジュール名のマクロ展開を禁止する [P3034R1]
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では、以下のようにモジュール名をマクロ (プリプロセッサ・トークン) にすることが禁止される。
14+
15+
```cpp
16+
// version.h:
17+
#ifndef VERSION_H
18+
#define VERSION_H
19+
20+
#define VERSION libv5
21+
22+
#endif
23+
24+
25+
// lib.cppm:
26+
module;
27+
#include "version.h"
28+
export module VERSION; // C++23: OK, C++26: NG
29+
```
30+
31+
この仕様は、C++20の欠陥として扱われる。そのため、C++20やC++23に対応したコンパイラですでに実装されている可能性がある。
32+
33+
34+
## 関連項目
35+
- [C++20 モジュール](/lang/cpp20/modules.md)
36+
37+
38+
## 参照
39+
- [P3034R1 Module Declarations Shouldn’t be Macros](https://open-std.org/jtc1/sc22/wg21/docs/papers/2024/p3034r1.html)
40+

0 commit comments

Comments
 (0)