Skip to content

C++23 以降に向けた提案

議論が進行中のおもな提案です。標準化会議によって規格化が妥当でないと判断された場合は採択されません。

標準ライブラリ モジュール

<iostream><vector> など、すべての C++ 標準ライブラリヘッダをモジュールとして提供する提案です。言語機能としてのモジュールは C++20 に導入されましたが、標準ライブラリへの導入は議論が間に合わず、C++23 に先送りされました。標準ライブラリのモジュールへの移行に合わせて、標準ライブラリを再編成する提案も出されています。

operator[] に複数の引数

m[i, j, k] のように、operator[] の引数に複数の値を渡せるようにする提案です。多次元配列の要素に簡潔な式でアクセスできるようになります。この書き方は、C++17 規格ではコンマ演算子と解釈されて m[k] になってしまうため、まずは現行の文法を deprecated にする提案が提出されています。std::span の多次元版である std::mdspan の提案での活用も期待されます。

低レベル オーディオ API

音声再生・録音を行う低レベル API std::audio を追加する提案です。以前頓挫した 2D Graphics API の標準化に比べれば、枯れている技術なので実現可能性は低くはなさそうです。波形データをオーディオデバイスとやり取りすることが主要な役割で、音声コーデックやフィルタなどの機能は提供しません。実験的な実装を公開して、設計に関するフィードバックを集めている段階です。

ネットワーク

ネットワーク機能を標準ライブラリに導入する提案です。Boost.Asio をベースに、ソケット通信、名前解決、インターネットプロトコル、タイマー、バッファ、非同期処理のための各種機能を実装する予定です。

リフレクション

C++ にリフレクションを導入する提案です。C# のような動的なリフレクションではなく、コンパイル時に情報を取得する静的なリフレクションです。

#include <experimental/reflect>

using namespace std::experimental::reflect;

constexpr void f(int arg1, int arg2);

using f_mobj = reflexpr(f(0, 1));

auto name = get_name_v<get_element_t<0, get_parameters_t<f_mobj>>>; // "arg1"

auto is_constexpr_function = is_constexpr<f_mobj>::value; // true

この機能を前提としたメタクラスの提案も議論が進んでいます。

Executors