From fef3ffc53cd1ed014b56d454bf06c7caf090a92d Mon Sep 17 00:00:00 2001 From: Tetsuro Matsumura Date: Sun, 31 Mar 2024 18:11:01 +0900 Subject: [PATCH] Update std.compat.md MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit "この機能が必要になった背景・経緯"を追加 --- module/std.compat.md | 14 ++++++++++++++ 1 file changed, 14 insertions(+) diff --git a/module/std.compat.md b/module/std.compat.md index 3366271e79..c71c002854 100644 --- a/module/std.compat.md +++ b/module/std.compat.md @@ -18,6 +18,20 @@ int main() { } ``` +## 備考 +`std.compat`は[`std`](std.md)の内容をすべて含んでいるので、`std.compat`をインポートする場合は[`std`](std.md)をインポートしなくてよい。 + +## この機能が必要になった背景・経緯 + +標準ライブラリモジュール[`std`](std.md)で、C言語互換ライブラリの内容をグローバル名前空間に導入するかどうかで意見が分かれた結果、別のモジュールとして用意することになった。 + +- C言語互換ライブラリの内容をグローバル名前空間に導入しない場合、既存コードベースを移行するのが難しくなる(例えば、`std::size_t`ではなく`size_t`と書いているコードは多いだろう)。 +- 一方、「``は確実にグローバル名前空間へ名前を導入する一方、`std`名前空間に導入するかどうかは未規定。``はその逆」という混乱した状況を、グローバル名前空間へ名前を導入しない方向へ解決する滅多にない機会でもあった。 + +そこで、2つのモジュールを用意することで両方の課題を解決することとなった。グローバル名前空間を綺麗にしたいユーザーは[`std`](std.md)のみを使用すればよい。 +一方、既存コードの互換性を重視したいときは、`std.compat`をインポートすればよい。 +ただし、この場合でも標準ライブラリのマクロに依存したコードの互換性はない点には注意が必要である。 + ## バージョン ### 言語 - C++23