概要
C++23とは、2023年中に改訂される予定の、C++バージョンの通称である。
このバージョンは、策定中のためC++2bと呼ばれることがある。「(C++20である2020年の次の) 202b年にリリースされる」という伏せ字として「b」が使われているが、3年周期に次のバージョンが策定されることが決まっているため、伏せ字になっている年数がずれることはない。
言語機能
言語機能 | 説明 |
---|---|
(符号付き)size_t リテラルのためのサフィックス |
42z /42Z とすることでsize_t に対応する符号付き整数型のリテラルとする |
部分特殊化の汎用化仕様 | 変数テンプレートの部分特殊化を許可するために部分特殊化の仕様を汎用化 |
文字・文字列リテラル中の数値・ユニバーサルキャラクタのエスケープに関する問題解決 | |
スコープと名前ルックアップの仕様整理 | 複雑で不完全になっているスコープと名前ルックアップの仕様を整理し、一部の問題を解決する |
ラムダ式で() を省略できる条件を緩和 |
キャプチャや修飾をともなってもパラメータリストが空であれば() を省略できる |
契約に基づくプログラミング (まだ入っていない) | 事前条件、事後条件、表明を宣言する新たな属性構文を追加 |
小さな変更
言語機能 | 説明 |
---|---|
参照するPOSIX規格を更新 | 新しいPOSIX規格の機能を標準C++が参照していたため、参照するPOSIX規格のバージョンを更新 |
ライブラリ更新の概要
新ライブラリ
- スタックトレースを取得するためのライブラリとして
<stacktrace>
を追加 - CとC++の間でのアトミック操作の相互運用のため、C互換ライブラリとして
<stdatomic.h>
を追加 - 契約違反のハンドリングをするためのライブラリとして
<contract>
を追加 (まだ入っていない)
文字列
std::basic_string
クラスとstd::basic_string_view
クラスに、文字列内に指定した文字・文字列が含まれているかを判定するメンバ関数contains()
を追加
スマートポインタ
<memory>
にstd::owner_hash
とstd::owner_equal
が追加され、非順序連想コンテナのキーとしてstd::weak_ptr
を使用できるようになった
ユーティリティ
- std::visit()に指定できるバリアントオブジェクトを、直接的な「
std::variant
型の特殊化であること」という制約を緩和し、std::variant
から派生した型も許可 <utility>
に、列挙値を基底型に変換するstd::to_underlying()
関数を追加
型特性
<type_traits>
に、スコープ付き列挙型かを判定する型特性std::is_scoped_enum
を追加<type_traits>
に、第1テンプレート引数についている型修飾を第2テンプレート引数の型に付加する型特性として、以下を追加:std::copy_const
std::copy_volatile
std::copy_cv
std::copy_reference
std::copy_extent
std::copy_all_extents
std::copy_pointer
std::copy_all_pointers
std::copy_cvref
<type_traits>
に、第1テンプレート引数についている型修飾を外す型特性として、以下を追加:std::remove_all_pointers
機能の非推奨化
std::algined_storage
とstd::aligned_union
を非推奨化。これらの機能は未定義動作を引き起こし、間違った保証が行われ、よくないAPI設計が行われていたため、非推奨となる。std::algined_storage
の代わりにalignas(T) std::byte[sizeof(T)];
を使用することを推奨するstd::aligned_union
の代わりにalignas(Ts...) std::byte[std::max({sizeof(Ts)...})];
を使用することを推奨する