最終更新日時(UTC):
が更新

履歴 編集

std(C++23)

std は、すべてのC++標準ライブラリ(C++ライブラリおよびC言語互換ライブラリ)の内容を含むモジュール

import std;

int main() {
  std::println("Hello, world!");
}

ただし、モジュールではマクロをエクスポートできないため、標準ライブラリで定義されるマクロは含まない。

import std;

int main() {
  assert(0 < 1); // エラー: assertはマクロなので含まない
}

マクロを使用したい場合、対応するヘッダーファイルをインクルード(または、ヘッダーユニットとしてインポート)する必要がある。

import std;
#include <cassert>

int main() {
  assert(0 < 1); // OK
}

このモジュールは、C言語互換ライブラリの内容をグローバル名前空間には導入しない。

import std;

int main() {
  std::printf("Hello, world!"); // OK
  printf("Hello, world!");      // エラー: グローバル名前空間では定義されない

  std::size_t x = 0;            // OK
  size_t y = 0;                 // エラー: グローバル名前空間では定義されない
}

グローバル名前空間にも定義を導入したい場合、stdの代わりにstd.compatを使用できる(両方を使う必要はない)。

この機能が必要になった背景・経緯

C++20に言語機能としてのモジュールを追加する議論と並行して、標準ライブラリをモジュールへ再編する議論も行われていた。 例えば、P0581R1では以下のモジュールが提案されている。

  • std.fundamental
  • std.core
  • std.io
  • std.os
  • std.concurrency
  • std.math
  • std

しかし、標準ライブラリ全体の再編はあまりにも壮大であり、C++20には間に合わなかった。 これではモジュールの恩恵を受けるのが難しいということで、最小限のモジュールとしてstdがC++23に間に合うように追加された。

バージョン

言語

  • C++23

処理系

関連項目

参照