最終更新日時(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から非推奨となっていた列挙値への算術演算で算術型に暗黙変換される仕様を削除

文字列

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

属性

言語機能 説明
属性の無視性を見直し 構文として適格な属性のみを無視できるようにし、そうでない属性の使用を不適格とする

テンプレート

言語機能 説明
パラメータパックへのインデックスアクセスを許可 可変引数テンプレートのパラメータパックに添字アクセスできるようにする

定数式

言語機能 説明
定数式でのvoid*からポインタ型へのキャストを許可 型消去のためにvoid*からポインタ型へのキャストを許可する
static_assertの診断メッセージにユーザーが生成した文字列の指定を許可 constexprS.size()S.data()メンバ関数をもつオブジェクトをコンパイル時文字列として指定できるようにする

ソースコード

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

ライブラリ更新の概要

新ライブラリ

  • 文字列エンコーディングを識別するライブラリとして、<text_encoding>を追加
  • 並行処理におけるデータの参照・更新を行うRCU (Read Copy Update) のライブラリとして、<rcu>を追加
  • 並行処理において参照中のデータが更新されないよう保護するハザードポインタのライブラリとして、<hazard_pointer>を追加
  • デバッグサポートのライブラリとして<debugging>を追加
  • 線形代数ライブラリとして<linalg>を追加

コンテナ

アルゴリズム

関数オブジェクト

文字列

ファイル

並行・並列処理

  • std::atomicオブジェクトに対する2つの値の最大値・最小値を取得する関数として、メンバ関数fetch_max()fetch_min()、非メンバ関数としてstd::atomic_fetch_maxstd::atomic_fetch_max_explicitstd::atomic_fetch_minstd::atomic_fetch_min_explicitを追加

スマートポインタ

  • std::weak_ptrを非順序連想コンテナのキーとして使用できるよう、<memory>に所有権ベースのハッシュ値を取得する関数オブジェクトstd::owner_hash、および所有権ベースの等値比較を行う関数オブジェクトstd::owner_equalを追加

日付・時間

数値

ユーティリティ

デバッグ

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

型特性

機能の削除

  • C++20から非推奨となっていた、std::basic_string::reserve()のパラメータなしのオーバーロードを削除
  • C++23から非推奨となっていた、std::allocatorのメンバ型is_always_equalを削除
  • C++17から非推奨となっていたUnicode変換ライブラリ<codecvt>を削除