C++29とは、2029年中に改訂される予定の、C++バージョンの通称である。
このバージョンは、策定中のためC++2dと呼ばれることがある。「(2020年代の4つ目のバージョンが) 202d年にリリースされる」という伏せ字として「d」が使われているが、3年周期に次のバージョンが策定されることが決まっているため、伏せ字になっている年数がずれることはない。
| 言語機能 | 説明 |
|---|---|
| 浮動小数点数のオーバーフローの動作の明確化 | 浮動小数点演算のオーバーフロー時の動作を明確に規定する |
| 非決定的なポインタの由来 | ポインタの由来を非決定的として扱うメモリモデルを整備する |
| 無効なポインタ操作の扱いを整理 | 解放済みなど無効なポインタに対する操作の扱いを整理・規定する |
| ポインタの生存期間終了によるzap問題の解決案 | 生存期間終了時にポインタ値が無効化される「zap」問題への解決策 |
| 言語機能 | 説明 |
|---|---|
| 名前付きユニバーサル文字エスケープを追加 | \N{...}で使える名前付き文字エスケープを拡張する |
| 言語機能 | 説明 |
|---|---|
return_valueとreturn_voidは排他的ではない |
コルーチンのpromise型がreturn_valueとreturn_voidの両方を持つことを許容する |
| 言語機能 | 説明 |
|---|---|
| ラムダの字句順序 | ラムダ式の字句上の順序を明確化する |
| 例外を送出する例外指定をもつ解放関数を不適格とする | throwする可能性がある例外指定を持つoperator deleteを不適格にする |
| 言語機能 | 説明 |
|---|---|
| 基底クラスに対する指示付き初期化 | 集成体初期化の.member = …を基底クラス部分にも使えるよう拡張する |
| 後置インクリメント・デクリメント演算のdefault定義 | 後置++/--を= defaultで定義(前置版から自動生成)できるようにする |
| default定義された代入演算子関数へ制約を追加 | = defaultで定義された代入演算子関数に制約を追加できるようにする |
| 契約を仮想関数に対応させる | 仮想関数に契約を適用できるようにする |
| 言語機能 | 説明 |
|---|---|
| テンプレートに対する言語リンケージ | テンプレートにextern "C"等の言語リンケージを適用する規則を整備する |
複合要件における条件付きnoexcept指定 |
コンセプトの複合要件{ 式 } noexceptで条件付きnoexceptを書けるようにする |
| テンプレート名に対するパック添字アクセス | テンプレート名のパックにT...[N]形式の添字アクセスを可能にする |
| 言語機能 | 説明 |
|---|---|
consteval時のみの値 |
consteval文脈でのみ存在・利用できる値の扱いを規定する |
| 言語機能 | 説明 |
|---|---|
#embedのオフセット引数 |
#embedにオフセット指定を追加し、埋め込むデータの開始位置を設定できるようにする |
| 言語機能 | 説明 |
|---|---|
| 未定義動作とIFNDRの付録を整理 | 規格中のUBとIFNDR(診断不要の不適格)を付録として一覧化・整理する |
| 言語機能 | 説明 |
|---|---|
| 新しいUnicode勧告に従った識別子の調整 | 識別子に使える文字を最新のUnicode勧告に合わせて調整する |
- 任意定義だった
std::intptr_t/std::uintptr_t型を必須定義とする
std::format()関数での浮動小数点数の規定の出力形式を修正- これまでの既定書式が最短文字数を基準としていたため、
100000.0→"1e+05"なのに120000.0→"120000"と一貫していない出力になっていたのを修正 - また、大きな値で
1234567890123456774144のような無意味な桁(garbage digits)がでる問題について、固定表記か指数表記かの切り替え基準を「値の大きさ(指数範囲[10⁻⁴, 10ⁿ))」に変更して修正した
- これまでの既定書式が最短文字数を基準としていたため、
<bit>に、以下のビット操作関数を追加- ビット列の並びを反転する
std::bit_reverse()関数 - 指定した下位ビットパターンを繰り返す
std::bit_repeat()関数 - 指定したマスクで立っている一のビットを下位に詰める
std::bit_compress()関数 - 下位ビットを指定したマスクが立っている位置へ展開する
std::bit_expand()関数 - 未定義動作にならないビットシフト
std::shl()関数とstd::shr()関数
- ビット列の並びを反転する
std::map/std::unordered_map/std::flat_mapクラスに、std::optional<要素への参照>を返す検索メンバ関数lookup()を追加std::ranges::view_interfaceクラスに、境界チェック付きでランダムアクセスをするメンバ関数at()を追加std::mdspanクラス向けのアルゴリズムとしてstd::copy()とstd::fill()を追加
<memory>ヘッダに、ポインタのタグ付けを行うstd::pointer_tag_pairクラスとその関連機能を追加
std::error_codeクラスのオブジェクトを文字列化する際の、カテゴリ名のエンコーディングの問題を修正し、std::format()用のformatter特殊化を追加
std::threadクラスとstd::jthreadクラスに、スレッド名とスタックサイズを設定する機能を追加- SIMDデータ用に連番を生成する
std::simd::iota変数テンプレートを追加 <bit>ヘッダと同様に、<simd>ヘッダにも、以下のビット操作関数を追加- ビット列の並びを反転する
std::simd::bit_reverse()関数 - 指定した下位ビットパターンを繰り返す
std::simd::bit_repeat()関数 - 指定したマスクで立っている一のビットを下位に詰める
std::simd::bit_compress()関数 - 下位ビットを指定したマスクが立っている位置へ展開する
std::simd::bit_expand()関数 - 未定義動作にならないビットシフト
std::simd::shl()関数とstd::simd::shr()関数
- ビット列の並びを反転する
<hazard_pointer>に、複数のハザードポインタをまとめて構築・破棄するstd::make_hazard_pointer_batch()関数とstd::clear_hazard_pointer_batch()関数を追加
<iostream>において、signed char/unsigned charの入出力を非推奨化。std::int8_t/std::uint8_tの別名として扱われるこれらの型の入出力で、整数型であることを期待して予期せぬ結果を招く可能性があった