C++29
概要
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::format()関数での浮動小数点数の規定の出力形式を修正
- これまでの既定書式が最短文字数を基準としていたため、
100000.0→"1e+05"なのに120000.0→"120000"と一貫していない出力になっていたのを修正
- また、大きな値で
1234567890123456774144のような無意味な桁(garbage digits)がでる問題について、固定表記か指数表記かの切り替え基準を「値の大きさ(指数範囲 [10⁻⁴, 10ⁿ))」に変更して修正した
ビット操作
コンテナ
メモリ
<memory>ヘッダに、ポインタのタグ付けを行うstd::pointer_tag_pairクラスとその関連機能を追加
エラーハンドリング
並行・並列
非推奨化