• Class / Function / Type

      std::
    • Header file

      <>
    • Other / All

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

    履歴 編集

    C++26

    概要

    C++26とは、2026年中に改訂される予定の、C++バージョンの通称である。

    このバージョンは、策定中のためC++2cと呼ばれることがある。「(2020年代の3つ目のバージョンが) 202c年にリリースされる」という伏せ字として「c」が使われているが、3年周期に次のバージョンが策定されることが決まっているため、伏せ字になっている年数がずれることはない。

    言語機能

    変数

    言語機能 説明
    std::initializer_listの配列を静的ストレージに配置する std::vector v = {1, 2, 3};のような初期化で初期化子リストを静的ストレージに配置することで無駄なコピーをなくす
    宣言のみで使用しない変数の名前として_をサポート 変数名_は暗黙で[[maybe_unused]]が指定される
    非推奨となっていた列挙型の算術変換を削除 C++20から非推奨となっていた列挙値への算術演算で算術型に暗黙変換される仕様を削除
    不完全型へのポインタに対するdeleteを不適格とする 未定義動作を引き起こす操作をコンパイルエラーとする
    返却された左辺値から暗黙変換された一時オブジェクトが参照に束縛されることを禁止する 寿命切れの変数によって引き起こされるバグを防止する
    要素数不明の配列を集成体初期化する規則を明確化 配列要素の集成体初期化で{}が省略された場合の矛盾していた規定を修正
    未初期化変数の読み取りをエラー性動作とする 初期化されていない自動変数の読み取りの安全性を規定する
    構造化束縛でパックを導入できるようにする タプルを分解する際に複数の変数をパックとして宣言できるようにする。auto [a, ...xs] = f();

    文字列

    言語機能 説明
    文字列リテラルの文字エンコーディング失敗を不適格とする 文字列リテラルのエンコーディング時に文字表現が失われる場合にコンパイルエラーにする
    コンパイル時にのみ使用される文字列の扱いを明確化 static_assert[[deprecated]]などで使用されるコンパイル時の文字列について、文字コードの指定を禁止し、実行時エンコーディングが行われないことを規定

    分岐・ループ

    言語機能 説明
    条件式での構造化束縛の使用を許可 式全体をbool値に変換できる場合に条件式で構造化束縛を使用できることとする
    自明な無限ループは未定義動作ではないと規定 並行プログラムの進行保証などを考慮して無限ループを未定義動作ではないものとする

    関数

    言語機能 説明
    関数宣言を削除する理由を指定できるようにする f() = delete("reason");
    契約プログラミングをサポートする 関数の事前条件事後条件、不変条件を記述できるようにする

    クラス

    言語機能 説明
    変換コンストラクタという用語を廃止する 規格上で「explicitではないコンストラクタ」という意味で定義されていたあまり使われない用語「変換コンストラクタ」を削除する
    共用体をトリビアルに未初期化できるようにする constexprでのunion U { T storage[N]; };を許可し、未初期化にできるようにする
    トリビアルな再配置 ムーブ構築と破棄のためにビット単位のコピーとデストラクタ評価が必要になる型のオブジェクトを再配置するメカニズムを導入する

    属性

    言語機能 説明
    属性の無視性を見直し 構文として適格な属性のみを無視できるようにし、そうでない属性の使用を不適格とする
    構造化束縛への属性を許可 auto [a, b [[maybe_unused]], c] = f();のように構造化束縛の要素に対して属性を付加できるようにする

    テンプレート

    言語機能 説明
    パラメータパックへのインデックスアクセスを許可 可変引数テンプレートのパラメータパックに添字アクセスできるようにする
    制約式内での畳み込み式の順序付け 畳み込み式では全体ではなく個別の制約を原子制約式として扱う
    可変引数テンプレートでfriend宣言をできるようにする クラステンプレートの可変引数テンプレートでまとめてfriend宣言できるようにする
    コンセプトと変数テンプレートにテンプレートテンプレートパラメータのサポートを追加 テンプレート引数をあとで指定するテンプレートテンプレートパラメータを、コンセプトと変数テンプレートでも使用できるようにする

    定数式

    言語機能 説明
    定数式でのvoid*からポインタ型へのキャストを許可 型消去のためにvoid*からポインタ型へのキャストを許可する
    static_assertの診断メッセージにユーザーが生成した文字列の指定を許可 constexprS.size()S.data()メンバ関数をもつオブジェクトをコンパイル時文字列として指定できるようにする
    constexpr配置new 定数式の文脈での配置newを許可
    constexpr構造化束縛の許可と、定数式への参照を定数式とする 定数式に対する構造化束縛を許可し、関連する定数式への参照が定数式になるようにする
    定数評価での例外送出を許可 定数式の文脈での例外の送出と捕捉を許可

    プリプロセッサ

    言語機能 説明
    ファイルを読み込む#embed命令を追加 バイナリファイルをインクルードするメカニズム。#includeとちがって読み出しサイズなどの柔軟な指定ができる

    ソースコード

    言語機能 説明
    基本文字集合に@、$、`を追加 C言語との互換性のためにこれらの文字を基本文字集合に追加

    モジュール

    言語機能 説明
    モジュール宣言でのモジュール名のマクロ展開を禁止する export module MACRO_NAME;を禁止

    機能の非推奨化

    言語機能 説明
    非推奨だった配列の比較を削除 C++20で非推奨となっていた配列比較を削除
    先行するカンマのない省略記号を非推奨化 void f(int, ...);はOK。void f(int...);は非推奨

    ライブラリ更新の概要

    新ライブラリ

    • 文字列エンコーディングを識別するライブラリとして、<text_encoding>を追加
    • 要素のメモリ位置が安定するシーケンスコンテナのライブラリとして<hive>を追加
    • 並行処理におけるデータの参照・更新を行うRCU (Read Copy Update) のライブラリとして、<rcu>を追加
    • 並行処理において参照中のデータが更新されないよう保護するハザードポインタのライブラリとして、<hazard_pointer>を追加
    • データ並列ライブラリとして、<simd>を追加
    • デバッグサポートのライブラリとして<debugging>を追加
    • 線形代数ライブラリとして<linalg>を追加
    • コンパイル時に容量を固定する可変長配列クラスのライブラリとして<inplace_vector>を追加
    • C23の互換ライブラリとして、ビット操作ライブラリ<stdbit.h>と、検査付き整数演算ライブラリ<stdckdint.h>を追加。<cstd…>形式のライブラリは追加されない

    全体

    コンテナ

    アルゴリズム

    関数オブジェクト

    文字列

    ファイル

    入出力

    並行・並列・非同期処理

    スマートポインタ・メモリ関連

    • 動的確保したオブジェクトに値の意味論をもたせてディープコピーさせるユーティリティクラスとして、<memory>std::indirectクラスとstd::polymorphicクラスを追加
    • std::weak_ptrを非順序連想コンテナのキーとして使用できるよう、<memory>に所有権ベースのハッシュ値を取得する関数オブジェクトstd::owner_hash、および所有権ベースの等値比較を行う関数オブジェクトstd::owner_equalを追加

    日付・時間

    数値

    ユーティリティ

    デバッグ

    • assertマクロの引数としてカンマを含む式を指定できるよう、可変引数化

    型特性

    • <type_traits>に、共用体のどのメンバがアクティブかを判定するための関数としてstd::is_within_lifetime()を追加
    • <type_traits>に、仮想継承の関係を判定するstd::is_virtual_base_ofを追加

    制約

    機能の非推奨化

    非推奨の取り消し

    機能の削除