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 の診断メッセージにユーザーが生成した文字列の指定を許可 |
constexpr なS.size() とS.data() メンバ関数をもつオブジェクトをコンパイル時文字列として指定できるようにする |
言語機能 | 説明 |
---|---|
基本文字集合に@、$、`を追加 | C言語との互換性のためにこれらの文字を基本文字集合に追加 |
- 文字列エンコーディングを識別するライブラリとして、
<text_encoding>
を追加 - 並行処理におけるデータの参照・更新を行うRCU (Read Copy Update) のライブラリとして、
<rcu>
を追加 - 並行処理において参照中のデータが更新されないよう保護するハザードポインタのライブラリとして、
<hazard_pointer>
を追加 - デバッグサポートのライブラリとして
<debugging>
を追加 - 線形代数ライブラリとして
<linalg>
を追加
std::mdspan
から部分ビューを取り出すstd::submdspan()
を追加std::span
に、以下を追加std::initializer_list
をとるコンストラクタ- インデックスアクセスのための
at()
メンバ関数
- 連想コンテナの以下のメンバ関数に、一時オブジェクトが生成されるコストを抑える拡張を追加
- 以下のアルゴリズムを
constexpr
に対応 - Rangeアルゴリズムが完全型を要求しないようにするため、
std::projected
の制約を緩和
- 所有権を保持しない
std::function
として、<functional>
にstd::function_ref
クラスを追加 std::move_only_function
のコピー可能版として、<functional>
にstd::copyable_function
クラスを追加std::bind_front()
とstd::bind_back()
に、非型テンプレート引数として関数を指定するオーバーロードを追加- 関連して、非型テンプレート引数の関数オブジェクトを反転させられるよう、
not_fn()
に非型テンプレート引数版のオーバーロードを追加
- 関連して、非型テンプレート引数の関数オブジェクトを反転させられるよう、
<charconv>
の変換結果std::to_chars_result
とstd::from_chars_result
に、変換が正しく完了したかを判定するoperator bool
を追加std::to_string()
の仕様がstd::sprintf()
で説明されていたが、std::format()
で定義するよう仕様を変更std::basic_istringstream
およびstd::basic_ostringstream
のコンストラクタおよびstr()
メンバ関数に、std::basic_string_view
を受け取るオーバーロードを追加std::format()
に、以下の改善を導入- ポインタ出力のサポートを追加
- 幅と精度を動的に指定した場合でも型の検証がコンパイル時に行われるよう仕様を見直し
- コンパイル時の書式文字列だけでなく、実行時の書式文字列を渡せるよう仕様修正
- ファイルのネイティブハンドルを取得できるよう、
std::basic_filebuf
、std::basic_ifstream
、std::basic_ofstream
、std::basic_fstream
クラスに、以下のメンバを追加native_handle_type
型native_handle()
std::atomic
オブジェクトに対する2つの値の最大値・最小値を取得する関数として、メンバ関数fetch_max()
とfetch_min()
、非メンバ関数としてstd::atomic_fetch_max
、std::atomic_fetch_max_explicit
、std::atomic_fetch_min
、std::atomic_fetch_min_explicit
を追加
std::weak_ptr
を非順序連想コンテナのキーとして使用できるよう、<memory>
に所有権ベースのハッシュ値を取得する関数オブジェクトstd::owner_hash
、および所有権ベースの等値比較を行う関数オブジェクトstd::owner_equal
を追加- 関連して、
std::shared_ptr
クラスとstd::weak_ptr
クラスのメンバ関数として、owner_hash()
とowner_equal()
を追加
- 関連して、
<chrono>
の以下のクラスにstd::hash
のサポートを追加std::chrono::duration
std::chrono::time_point
std::chrono::day
std::chrono::month
std::chrono::year
std::chrono::weekday
std::chrono::weekday_indexed
std::chrono::weekday_last
std::chrono::month_day
std::chrono::month_day_last
std::chrono::month_weekday
std::chrono::month_weekday_last
std::chrono::year_month
std::chrono::year_month_day
std::chrono::year_month_day_last
std::chrono::year_month_weekday
std::chrono::year_month_weekday_last
std::chrono::zoned_time
std::chrono::leap_second
<numeric>
に、飽和演算 (Saturation Arithmetic) として、型の表現可能な範囲で演算を行う以下の関数を追加<cmath>
の以下の関数を、constexpr
に対応 (特殊関数と、グローバルの丸めモードに依存する丸め関数以外の全て)std::cos()
std::sin()
std::tan()
std::cosh()
std::sinh()
std::tanh()
std::acos()
std::asin()
std::atan()
std::atan2()
std::acosh()
std::asinh()
std::atanh()
std::exp()
std::exp2()
std::expm1()
std::log()
std::log10()
std::log1p()
std::log2()
std::pow()
std::sqrt()
std::cbrt()
std::hypot()
std::erf()
std::erfc()
std::lgamma()
std::tgamma()
<complex>
の以下の関数を、constexpr
に対応 (すべて)std::abs()
std::arg()
std::proj()
std::polar()
std::cos()
std::sin()
std::tan()
std::cosh()
std::sinh()
std::tanh()
std::acos()
std::asin()
std::atan()
std::acosh()
std::asinh()
std::atanh()
std::exp()
std::log()
std::log10()
std::pow()
std::sqrt()
std::norm()
(算術型オーバーロード)std::conj()
(算術型オーバーロード)std::imag()
(算術型オーバーロード)std::real()
(算術型オーバーロード)
std::complex
を構造化束縛や、将来のパターンマッチで使用できるようタプルインタフェースの特殊化を追加<random>
の範囲[0, 1)
の乱数を生成するstd::generate_canonical()
を、望ましい統計的性質を保証するようアルゴリズムと制約を変更
std::variant
クラスに、メンバ関数版のvisit()
を追加<ratio>
に、新たなSI接頭辞として、以下を追加
assert
マクロの引数としてカンマを含む式を指定できるよう、可変引数化
- 共用体のどのメンバがアクティブかを判定するための関数として、
<type_traits>
にstd::is_within_lifetime()
を追加 std::bitset
に、std::basic_string_view
を受け取るコンストラクタを追加
- C++20から非推奨となっていた、
std::basic_string
::
reserve()
のパラメータなしのオーバーロードを削除 - C++23から非推奨となっていた、
std::allocator
のメンバ型is_always_equal
を削除 - C++17から非推奨となっていたUnicode変換ライブラリ
<codecvt>
を削除