Skip to content

Latest commit

 

History

History
350 lines (285 loc) · 28.2 KB

cpp26.md

File metadata and controls

350 lines (285 loc) · 28.2 KB

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を不適格とする 未定義動作となる操作をコンパイルエラーとする
返却された左辺値から暗黙変換された一時オブジェクトが参照に束縛されることを禁止する 寿命切れの変数によって引き起こされるバグを防止する
要素数不明の配列を集成体初期化する規則を明確化 配列要素の集成体初期化で{}が省略された場合の矛盾していた規定を修正
未初期化変数の読み取りを不正動作 (erroneous behaviour: EB) とする 初期化されていない自動変数の読み取りの安全性を規定する

文字列

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

分岐・ループ

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

関数

言語機能 説明
関数宣言を削除する理由を指定できるようにする f() = delete("reason");

属性

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

テンプレート

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

定数式

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

ソースコード

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

モジュール

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

ライブラリ更新の概要

新ライブラリ

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

コンテナ

アルゴリズム

関数オブジェクト

文字列

ファイル

入出力

並行・並列処理

スマートポインタ

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

日付・時間

数値

ユーティリティ

  • std::variantクラスに、メンバ関数版のvisit()を追加
  • std::optionalクラスに、0もしくは1要素のRangeとして扱えるようにするための拡張として、イテレータインタフェースを追加
    • iterator
    • const_iterator
    • begin()メンバ関数
    • end()メンバ関数
  • std::ignoreをファーストクラス・オブジェクトとして型を詳細に定義
  • std::bitsetに、std::basic_string_viewを受け取るコンストラクタを追加
  • <ratio>に、新たなSI接頭辞として、以下を追加

デバッグ

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

型特性

制約

非推奨の取り消し

機能の削除