GV

GeezerVison

The World Wide Web, restored to 800 pixels of glory.

Home|About|Gaming cabinet|Archives|How it works|Starter sites

On this site

  • cpprefjp - C++日本語リファレンス
  • GitHub Project

This view

  • Original page
  • New address

GeezerVison is showing cpprefjp.github.io — C++26 - cpprefjp C++日本語リファレンス

  1. 言語機能
  2. C++26

最終更新日時: 2026年10月03日 22時31分04秒 (JST)
Akira Takahashi が更新

履歴 編集

C++26

概要

C++26とは、2026年中に改訂される予定の、C++バージョンの通称である。

このバージョンは、策定中のためC++2cと呼ばれることがある。「(2020年代の3つ目のバージョンが) 202c年にリリースされる」という伏せ字として「c」が使われているが、3年周期に次のバージョンが策定されることが決まっているため、伏せ字になっている年数がずれることはない。

言語機能

変数

言語機能 説明
std::initializer_listの配列を静的記憶域に配置する std::vector v = {1, 2, 3};のような初期化で初期化子リストを静的記憶域に配置することで無駄なコピーをなくす
宣言のみで使用しない変数の名前として_をサポート 変数名_は暗黙で[[maybe_unused]]が指定される
不完全型へのポインタに対するdeleteを不適格とする 未定義動作を引き起こす操作をコンパイルエラーとする
返却された左辺値から暗黙変換された一時オブジェクトが参照に束縛されることを禁止する 寿命切れの変数によって引き起こされるバグを防止する
要素数不明の配列を集成体初期化する規則を明確化 配列要素の集成体初期化で{}が省略された場合の矛盾していた規定を修正
未初期化変数の読み取りをエラー性動作とする 初期化されていない自動変数の読み取りの安全性を規定する
構造化束縛でパックを導入できるようにする タプルを分解する際に複数の変数をパックとして宣言できるようにする。auto [a, ...xs] = f();

文字列

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

分岐・ループ

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

関数

言語機能 説明
関数宣言を削除する理由を指定できるようにする f() = delete("reason");
契約プログラミングをサポートする 関数の事前条件、事後条件、不変条件を記述できるようにする

クラス

言語機能 説明
共用体の特殊メンバ関数のトリビアル化 非トリビアルな型をメンバにもつ共用体のデフォルトコンストラクタとデストラクタをトリビアルにし、未初期化ストレージとして使用可能にする
共用体メンバの生存期間規則の調整 共用体の先頭メンバの生存期間を暗黙に開始する規則を撤回してstd::start_lifetime()による明示的な開始へ変更し、生存期間外の要素を含む配列メンバを定数式で許可する
配置newの解放処理を明確化 配置newで確保したメモリの解放処理の取り扱いに関するルールを明確化する

属性

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

テンプレート

言語機能 説明
パラメータパックへのインデックスアクセスを許可 可変引数テンプレートのパラメータパックに添字アクセスできるようにする
制約式内での畳み込み式の順序付け 畳み込み式を含む制約の包摂関係を認識できるようにし、オーバーロード解決の曖昧さを解消する
可変引数テンプレートでfriend宣言をできるようにする クラステンプレートの可変引数テンプレートでまとめてfriend宣言できるようにする
コンセプトと変数テンプレートをテンプレート引数として渡せるようにする テンプレートテンプレートパラメータとして、クラステンプレートやエイリアステンプレートに加え、コンセプトと変数テンプレートも渡せるようにする
可変引数テンプレートの半順序を再検討する 可変引数テンプレートの部分特殊化の半順序ルールを再検討して、より一貫したルールにする
テンプレートテンプレートパラメータに対するクラステンプレートパラメータ引数推論 テンプレートテンプレートパラメータからクラステンプレート引数を推論できるようにクラステンプレートのテンプレート引数推論を拡張する
SFINAEが適用される「直接文脈」を定義 テンプレートの置換失敗がエラーにならない範囲を「直接文脈」として正式に定義し、デフォルト引数・noexcept指定・契約指定子の中での置換失敗がコンパイルエラーとなることを明確化する

定数式

言語機能 説明
静的リフレクション リフレクション演算子^^とstd::meta::info型によりコンパイル時にさまざまな情報を取得できる
コンパイル時のタプルやリストを展開処理するtemplate for文 タプル・構造体・Range・パラメータパックなどの各要素に対してコンパイル時に文を展開するtemplate for文を追加
定数式でのvoid*からポインタ型へのキャストを許可 型消去のためにvoid*からポインタ型へのキャストを許可する
static_assertの診断メッセージにユーザーが生成した文字列の指定を許可 constexprなS.size()とS.data()メンバ関数をもつオブジェクトをコンパイル時文字列として指定できるようにする
constexpr配置new 定数式の文脈での配置newを許可
constexpr構造化束縛の許可と、constexpr参照の制限緩和 定数式に対する構造化束縛を許可し、関連してconstexpr参照の制限を緩和して自動変数も参照できるようにする
定数評価での例外送出を許可 定数式の文脈での例外の送出と捕捉を許可
constexpr仮想継承を許可 定数式の文脈での仮想継承を許可
定数評価の開始・終了タイミングを明確化 定数評価がどのタイミングで開始・終了するかを明確化し、constexprコンテキストの規則を整える

プリプロセッサ

言語機能 説明
ファイルを読み込む#embed命令を追加 バイナリファイルをインクルードするメカニズム。#includeとちがって読み出しサイズなどの柔軟な指定ができる
プリプロセッサ仕様での「未定義動作」を不適格 (診断不要) に変更 プリプロセッサとレキサーの文脈での「未定義動作」用語を不適格 (診断不要) に変更
#lineディレクティブの制約を現実の実装に合わせて緩和する #line 0や#line 2147483648のような行番号指定を不適格としていたが、条件付きサポートとして許可する

ソースコード

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

モジュール

言語機能 説明
モジュール宣言でのモジュール名のマクロ展開を禁止する export module MACRO_NAME;を禁止
main関数をグローバルモジュールに含められるようにする main関数にextern "C++"を指定できるようにすることで名前付きモジュールに含められるようにする
モジュール宣言より前での#lineディレクティブの使用を許可する モジュール宣言より前での#lineディレクティブの使用を禁止していたのは過度な制限だった

機能の非推奨化

言語機能 説明
先行するカンマのない省略記号を非推奨化 void f(int, ...);はOK。void f(int...);は非推奨

機能の削除

言語機能 説明
非推奨だった組み込み配列の比較を削除 C++20で非推奨となっていた配列比較を削除
非推奨となっていた列挙型の算術変換を削除 C++20から非推奨となっていた列挙値への算術演算で算術型に暗黙変換される仕様を削除

ライブラリ更新の概要

新ライブラリ

  • 文字列エンコーディングを識別するライブラリとして、<text_encoding>を追加
  • 要素のメモリ位置が安定するシーケンスコンテナのライブラリとして<hive>を追加
  • 並行処理におけるデータの参照・更新を行うRCU (Read Copy Update) のライブラリとして、<rcu>を追加
  • 並行処理において参照中のデータが更新されないよう保護するハザードポインタのライブラリとして、<hazard_pointer>を追加
  • データ並列ライブラリとして、<simd>を追加
  • デバッグサポートのライブラリとして<debugging>を追加
  • 線形代数ライブラリとして<linalg>を追加
  • コンパイル時に容量を固定する可変長配列クラスのライブラリとして<inplace_vector>を追加
  • C23の互換ライブラリとして、ビット操作ライブラリ<stdbit.h>と、検査付き整数演算ライブラリ<stdckdint.h>を追加。<cstd…>形式のライブラリは追加されない

全体

  • 標準ライブラリに付加された、戻り値を無視した際に警告を出力する[[nodiscard]]属性を削除

コンテナ

  • std::vector<bool>::referenceのプロキシ操作として、const修飾付きの代入とswap()メンバ関数を追加
  • std::mdspanから部分ビューを取り出すstd::submdspan()を追加
  • std::submdspan()のスライス指定子として、取り出す要素数とストライド幅を指定するstd::extent_sliceと、取り出し元の半開区間とストライド幅を指定するstd::range_sliceを追加
  • std::mdspanに、インデックスを指定して要素を取り出すat()メンバ関数を追加
  • std::mdspanに対するstd::dextents指定の冗長さを解決するstd::dimsを追加
  • std::mdspanのレイアウトとして、std::layout_left_paddedとstd::layout_right_paddedを追加
  • <mdspan>に、要素アクセスにアライメント保証を与えるstd::aligned_accessorを追加
  • std::spanに、インデックスアクセスのためのat()メンバ関数を追加
  • 連想コンテナの以下のメンバ関数に、一時オブジェクトが生成されるコストを抑える拡張を追加
    • std::map
      • operator[]
      • at()
      • try_emplace()
      • insert_or_assign()
    • std::set
      • insert()
    • std::unordered_map
      • operator[]
      • at()
      • try_emplace()
      • insert_or_assign()
      • bucket()
    • std::unordered_multimap
      • bucket()
    • std::unordered_set
      • insert()
      • bucket()
    • std::unordered_multiset
      • bucket()
  • std::spanとstd::mdspanの推論補助を改善
  • std::views::concatを追加
  • std::views::cache_latestを追加
  • std::views::as_inputを追加。これはパフォーマンス向上のために、Rangeを入力Rangeかつ非common_range (イテレータと番兵の型を別する) に変換する
  • Range関係の、償却定数時間での要素追加を行う機能を追加
    • 各viewクラスにreserve_hint()メンバ関数を追加
    • std::ranges::reserve_hint()関数を追加
    • std::ranges::approximately_sized_rangeコンセプトを追加
  • インデックス列を生成するstd::views::indicesを追加
  • 連続イテレータのコンセプトcontiguous_iteratorに、ポインタに変換できることを要件として追加
  • std::initializer_listクラスを以下のように変更
    • 独自に定義されていたstd::begin() / std::end()のオーバーロードを削除 (std::cbegin()やstd::rend()のようなオーバーロードがなかったため、ほかとの不整合があった)
    • メンバ関数data()を追加
    • メンバ関数empty()を追加
  • std::valarrayクラスを以下のように変更
    • 独自に定義されていたstd::begin() / std::end()のオーバーロードを削除 (std::cbegin()やstd::rend()のようなオーバーロードがなかったため、ほかとの不整合があった)
    • メンバ型iterator / const_iteratorを追加
    • メンバ関数begin() / end()を追加
  • イテレータインタフェースの非メンバ関数std::begin() / std::end() / std::cbegin() / std::cend() / std::rbegin() / std::rend() / std::crbegin() / std::crend() / std::size() / std::ssize() / std::empty() / std::data()を以下のように変更
    • std::initializer_list型に対するオーバーロードを削除 (専用のオーバーロードを用意しなくても汎用オーバーロードが使用できるようになった)
    • 条件付きnoexcept指定を追加
  • Rangeインタフェースの非メンバ関数std::ranges::begin() / std::ranges::end() / std::ranges::cbegin() / std::ranges::cend() / std::ranges::rbegin() / std::ranges::rend() / std::ranges::crbegin() / std::ranges::crend() / std::ranges::size() / std::ranges::ssize() / std::ranges::empty() / std::ranges::data()を以下のように変更
    • std::initializer_list型に対するオーバーロードを削除 (専用のオーバーロードを用意しなくても汎用オーバーロードが使用できるようになった)
    • 条件付きnoexcept指定を追加
  • 以下のコンテナをconstexprに対応
    • std::deque
    • std::forward_list
    • std::list
    • std::map (ただしnode_handle::key()を使用すると未定義動作)
    • std::multimap (ただしnode_handle::key()を使用すると未定義動作)
    • std::set
    • std::multiset
    • std::unordered_map (ハッシュ関数のカスタム化が必要) (ただしnode_handle::key()を使用すると未定義動作)
    • std::unordered_multimap (ハッシュ関数のカスタム化が必要) (ただしnode_handle::key()を使用すると未定義動作)
    • std::unordered_set (ハッシュ関数のカスタム化が必要)
    • std::unordered_multiset (ハッシュ関数のカスタム化が必要)
    • std::flat_map
    • std::flat_multimap
    • std::flat_set
    • std::flat_multiset
    • std::queue
    • std::priority_queue
    • std::stack

アルゴリズム

  • <algorithm>と<memory>のアルゴリズムを並列実行に対応
  • <algorithm>の以下のアルゴリズムをconstexprに対応
    • std::stable_sort() / std::ranges::stable_sort()
    • std::stable_partition() / std::ranges::stable_partition()
    • std::inplace_merge() / std::ranges::inplace_merge()
  • <memory>の以下のアルゴリズムをconstexprに対応
    • std::uninitialized_default_construct() / std::ranges::uninitialized_default_construct()
    • std::uninitialized_default_construct_n() / std::ranges::uninitialized_default_construct_n()
    • std::uninitialized_value_construct() / std::ranges::uninitialized_value_construct()
    • std::uninitialized_value_construct_n() / std::ranges::uninitialized_value_construct_n()
    • std::uninitialized_copy() / std::ranges::uninitialized_copy()
    • std::uninitialized_copy_n() / std::ranges::uninitialized_copy_n()
    • std::uninitialized_move() / std::ranges::uninitialized_move()
    • std::uninitialized_move_n() / std::ranges::uninitialized_move_n()
    • std::uninitialized_fill() / std::ranges::uninitialized_fill()
    • std::uninitialized_fill_n() / std::ranges::uninitialized_fill_n()
  • Rangeアルゴリズムが完全型を要求しないようにするため、std::projectedの制約を緩和
  • 以下のアルゴリズムに、値を波カッコ初期化で渡せるよう制約を追加
    • std::erase()
      • std::basic_string版std::erase()
      • std::deque版std::erase()
      • std::forward_list版std::erase()
      • std::list版std::erase()
      • std::vector版std::erase()
    • std::find()とstd::ranges::find()
    • std::ranges::find_last()
    • std::count()とstd::ranges::count()
    • std::search_n()とstd::ranges::search_n()
    • std::replace()とstd::ranges::replace()
    • std::replace_if()とstd::ranges::replace_if()
    • std::ranges::replace_copy()
    • std::replace_copy_if()とstd::ranges::replace_copy_if()
    • std::fill()とstd::ranges::fill()
    • std::fill_n()とstd::ranges::fill_n()
    • std::remove()とstd::ranges::remove()
    • std::remove_copy()とstd::ranges::remove_copy()
    • std::lower_bound()とstd::ranges::lower_bound()
    • std::upper_bound()とstd::ranges::upper_bound()
    • std::equal_range()とstd::ranges::equal_range()
    • std::binary_search()とstd::ranges::binary_search()
    • std::ranges::fold_left()
    • std::ranges::fold_right()
    • std::ranges::contains()
    • std::uninitialized_fill()とstd::ranges::uninitialized_fill()
    • std::uninitialized_fill_n()とstd::ranges::uninitialized_fill_n()

関数オブジェクト

  • 所有権を保持しないstd::functionとして、<functional>にstd::function_refクラスを追加
  • std::move_only_functionのコピー可能版として、<functional>にstd::copyable_functionクラスを追加
  • std::bind_front()とstd::bind_back()に、非型テンプレート引数として関数を指定するオーバーロードを追加
    • 関連して、非型テンプレート引数の関数オブジェクトを反転させられるよう、not_fn()に非型テンプレート引数版のオーバーロードを追加
  • std::reference_wrapperに、比較演算子==と<=>を追加

文字列

  • <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()に、以下の改善を導入
    • ポインタ出力のサポートを追加
    • 幅と精度を動的に指定した場合でも型の検証がコンパイル時に行われるよう仕様を見直し
    • コンパイル時の書式文字列だけでなく、実行時の書式文字列を渡せるよう仕様修正
    • 非ロケール版をconstexprに対応
  • std::to_string()とstd::to_wstring()の整数オーバーロードがconstexprに対応
  • std::basic_stringクラスとstd::basic_string_viewクラスに、部分文字列をstd::basic_string_viewとして取得するメンバ関数subview()を追加
  • std::basic_stringとstd::basic_string_viewをstd::basic_stringとして連結させるoperator+を追加

ファイル

  • ファイルのネイティブハンドルを取得できるよう、std::basic_filebuf、std::basic_ifstream、std::basic_ofstream、std::basic_fstreamクラスに、以下のメンバを追加
    • native_handle_type型
    • native_handle()
  • std::filesystem::pathクラスに、文字列フォーマットのサポートを追加
  • std::filesystem::pathクラスに、出力用の文字列を取得するための、以下のメンバ関数を追加
    • display_string()
    • native_encoded_string()
    • generic_display_string()
    • generic_native_encoded_string()

入出力

  • std::print()とstd::println()に、ロックを取得せず高速に書き出す最適化を許可
  • std::println()に、改行のみを出力するオーバーロードを追加
  • std::print()とstd::println()をより高速にできる最適化が可能か判定するstd::enable_nonlocking_formatter_optimizationを追加
  • std::basic_istream::ignore()メンバ関数に、区切り文字としてchar型をとるオーバーロードを追加

並行・並列・非同期処理

  • <execution>に汎用的な非同期実行を管理するフレームワークを追加
  • std::atomicオブジェクトに対する2つの値の最大値・最小値を取得する関数として、以下を追加
    • メンバ関数
      • fetch_max()
      • fetch_min()
      • fetch_fmaximum() (浮動小数点数用)
      • fetch_fminimum() (浮動小数点数用)
      • fetch_fmaximum_num() (浮動小数点数用)
      • fetch_fminimum_num() (浮動小数点数用)
    • 非メンバ関数として
      • std::atomic_fetch_max()
      • std::atomic_fetch_max_explicit()
      • std::atomic_fetch_min()
      • std::atomic_fetch_min_explicit()
  • std::atomicクラスとstd::atomic_refクラスに、現在の値を読み込まず (fetchせず) に加算などをする高速な縮約用の操作として、以下を追加
    • メンバ関数
      • store_add()
      • store_sub()
      • store_and()
      • store_or()
      • store_xor()
      • store_max()
      • store_min()
      • store_fmaximum() (浮動小数点数用)
      • store_fminimum() (浮動小数点数用)
      • store_fmaximum_num() (浮動小数点数用)
      • store_fminimum_num() (浮動小数点数用)
    • 非メンバ関数
      • std::atomic_store_add()
      • std::atomic_store_add_explicit()
      • std::atomic_store_sub()
      • std::atomic_store_sub_explicit()
      • std::atomic_store_and()
      • std::atomic_store_and_explicit()
      • std::atomic_store_or()
      • std::atomic_store_or_explicit()
      • std::atomic_store_xor()
      • std::atomic_store_xor_explicit()
      • std::atomic_store_max()
      • std::atomic_store_max_explicit()
      • std::atomic_store_min()
      • std::atomic_store_min_explicit()
  • std::atomic_refクラスに、参照するオブジェクトのアドレスを取得するaddress()メンバ関数を追加
  • std::atomicクラスのテンプレートパラメータとしてCV修飾された型を禁止
  • std::atomic_refクラスのテンプレートパラメータとして、CV修飾された型を受け取れるようにした (内部でCV修飾が外される)
  • <atomic>ライブラリのアトミック操作をconstexpr対応

スマートポインタ・メモリ関連

  • 動的確保したオブジェクトに値の意味論をもたせてディープコピーさせるユーティリティクラスとして、<memory>にstd::indirectクラスとstd::polymorphicクラスを追加
  • std::weak_ptrを非順序連想コンテナのキーとして使用できるよう、<memory>に所有権ベースのハッシュ値を取得する関数オブジェクトstd::owner_hash、および所有権ベースの等値比較を行う関数オブジェクトstd::owner_equalを追加
    • 関連して、std::shared_ptrクラスとstd::weak_ptrクラスのメンバ関数として、owner_hash()とowner_equal()を追加
  • std::shared_ptrクラスとその関連機能をconstexpr対応

日付・時間

  • <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

数値

  • <cmath>に、浮動小数点数の最大値・最小値を求める以下の関数を追加
    • std::fmaximum() (-0.0と+0.0では+0.0を返し、NaNと数値ではNaNを返す)
    • std::fmaximum_num() (-0.0と+0.0では+0.0を返し、NaNと数値では数値を返す)
    • std::fminimum() (-0.0と+0.0では-0.0を返し、NaNと数値ではNaNを返す)
    • std::fminimum_num() (-0.0と+0.0では-0.0を返し、NaNと数値では数値を返す)
  • <numeric>に、飽和演算 (Saturation Arithmetic) として、型の表現可能な範囲で演算を行う以下の関数を追加
    • std::saturating_add()
    • std::saturating_sub()
    • std::saturating_mul()
    • std::saturating_div()
    • std::saturating_cast()
  • std::complexを構造化束縛や、将来のパターンマッチで使用できるようタプルインタフェースの特殊化を追加
  • <random>の範囲[0, 1)の乱数を生成するstd::generate_canonical()を、望ましい統計的性質を保証するようアルゴリズムと制約を変更
  • <random>に、乱数列を生成するstd::ranges::generate_random()関数を追加
  • <random>に、乱数生成器は並列シミュレーションに効果的なカウンターベースのPhilox乱数生成器として、std::philox_engineクラス、およびその別名であるstd::philox4x32とstd::philox4x64を追加
  • <random>の乱数生成器にsigned charとunsigned charのサポートを追加
  • <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::variantクラスに、メンバ関数版のvisit()を追加
  • std::monostateとその比較演算子、hash特殊化を、<variant>ヘッダに加えて<utility>ヘッダでも使用できるようにした
  • std::optionalクラスに、0もしくは1要素のRangeとして扱えるようにするための拡張として、イテレータインタフェースを追加
    • iterator型
    • const_iterator型
    • begin()メンバ関数
    • end()メンバ関数
  • std::optionalに、参照を保持するためのT&の部分特殊化を追加
  • std::applyの戻り値型推論をやめて、戻り値型用のstd::apply_resultクラスを追加し、関連する以下の機能を追加
    • std::is_applicable型特性
    • std::is_nothrow_applicable型特性
  • std::ignoreをファーストクラス・オブジェクトとして型を詳細に定義
  • std::bitsetに、std::basic_string_viewを受け取るコンストラクタを追加
  • <ratio>に、新たなSI接頭辞として、以下を追加
    • ronna (1027)
    • ronto (10−27)
    • quetta (1030)
    • quecto (10−30)
  • 定数式での例外送出が許可されることにともない、以下をconstexpr化
    • <exception>ヘッダの以下の機能
      • std::exceptionクラスの全メンバ関数
      • std::bad_exceptionクラスのwhat()メンバ関数
      • std::rethrow_exception()関数
      • std::make_exception_ptr()関数
    • <new>ヘッダの以下の機能
      • std::bad_allocクラスのwhat()メンバ関数
      • std::bad_array_new_lengthクラスのwhat()メンバ関数
    • <typeinfo>ヘッダの以下の機能
      • std::bad_castクラスのwhat()メンバ関数
      • std::bad_typeidクラスのwhat()メンバ関数
    • <stdexcept>ヘッダの以下の機能
      • std::domain_error
      • std::invalid_argument
      • std::length_error
      • std::logic_error
      • std::out_of_range
      • std::runtime_error
      • std::range_error
      • std::overflow_error
      • std::underflow_error
    • <expected>ヘッダの以下の機能
      • std::bad_expected_access
    • <optional>ヘッダの以下の機能
      • std::bad_optional_access
    • <variant>ヘッダの以下の機能
      • std::bad_variant_access
    • <format>ヘッダの以下の機能
      • std::format_error
  • <memory>に、ポインタのアライメントを判定するstd::is_sufficiently_aligned()関数を追加。
  • <utility>に、タイムトラベル最適化を抑止するための観測可能ポイントとしてstd::observable_checkpoint()を追加
  • std::exception_ptrを指定した例外型にキャストするstd::exception_ptr_cast()関数を追加
  • <compare>に、型の順序を取得するstd::type_orderクラスを追加
  • <utility>に、定数を型として包むことで、関数の引数として渡しても定数式として扱えるようにする定数ラッパーstd::constant_wrapperクラスと、それを簡潔に生成する変数テンプレートstd::cwを追加

デバッグ

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

型特性

  • <type_traits>に、共用体の指定されたメンバがアクティブかを定数式で判定するための関数としてstd::is_within_lifetime()を追加
  • <type_traits>に、仮想継承の関係を判定するstd::is_virtual_base_ofを追加
  • std::integer_sequenceクラスを構造化束縛とtemplate for文で使用できるようにするため、タプルインタフェースの特殊化を追加

制約

  • 間接実行に関連する制約から、共通参照の要件を削除
    • std::indirectly_unary_invocable
    • std::indirectly_regular_unary_invocable
    • std::indirect_unary_predicate
    • std::indirect_binary_predicate
    • std::indirect_equivalence_relation
    • std::indirect_strict_weak_order

機能の非推奨化

  • <type_traits>のstd::is_trivialを非推奨化
    • これはstd::is_trivially_copyableとstd::is_trivially_default_constructibleの2つが合わさったものであるが、それらは異なる状況で必要になるものであった
  • std::memory_order::consumeと、それに関連してstd::kill_dependency()を非推奨化し、[[carries_dependency]]属性を削除
  • std::filesystem::pathクラスの、以下の非テンプレート版メンバ関数を非推奨化
    • string()
    • generic_string()
    • これらはOS依存のパス名エンコーディングへ変換するため、iostream・std::format()・std::print()を含むほぼすべての標準のテキスト処理・入出力機能と互換性がなく、文字化けやデータ損失の原因になりやすい
    • レガシーなシステムAPIにパスを渡す用途では、ネイティブエンコーディングへの変換であることを明確にしたnative_encoded_string()・generic_native_encoded_string()を使用する
    • 表示・フォーマットの用途では、display_string()・generic_display_string()、もしくはstd::format()・std::print()を使用する

非推奨の取り消し

  • std::polymorphic_allocator::destroy()の非推奨を取り消し

機能の削除

  • C++98から非推奨となっていた<strstream>ライブラリを削除
  • C++17から非推奨となっていたUnicode変換ライブラリ<codecvt>と、std::wstring_convertクラス、std::wbuffer_convertクラスを削除
  • C++20から非推奨となっていた、std::basic_string::reserve()のパラメータなしのオーバーロードを削除
  • C++20から非推奨となっていたstd::shared_ptrに対する、以下の古いアトミック操作関数のオーバーロードを削除
    • std::atomic_is_lock_free
    • std::atomic_load
    • std::atomic_load_explicit
    • std::atomic_store
    • std::atomic_store_explicit
    • std::atomic_exchange
    • std::atomic_exchange_explicit
    • std::atomic_compare_exchange_weak
    • std::atomic_compare_exchange_strong
    • std::atomic_compare_exchange_weak_explicit
    • std::atomic_compare_exchange_strong_explicit
  • C++23から非推奨となっていた、std::allocatorのメンバ型is_always_equalを削除

取り決め

  • C言語の参照をC17からC23に更新。これにともない、Cライブラリ由来のヘッダに以下の変更が入った
    • <cstdlib>: free_sized()・free_aligned_sized()・memalignment()・strfromf()・strfromd()・strfroml()を追加。bsearch()にconst版オーバーロードを追加。realloc()にサイズ0を渡した場合がエラー性動作となった
    • <ctime>: timespec_getres()・timegm()・gmtime_r()・localtime_r()と、TIME_MONOTONIC・TIME_ACTIVE・TIME_THREAD_ACTIVE・__STDC_VERSION_TIME_H__を追加。asctime()・ctime()を非推奨化
    • <cmath>: nextup()・nextdown()を追加
    • <cstdio>: _PRINTF_NAN_LEN_MAX・__STDC_VERSION_STDIO_H__を追加
    • <cinttypes>: 2進数用の書式指定マクロ (PRIbN・SCNbN等) と__STDC_VERSION_INTTYPES_H__を追加
    • <cfloat>: INFINITY・NAN・FLT_SNAN・DBL_SNAN・LDBL_SNAN・__STDC_VERSION_FLOAT_H__を追加。DECIMAL_DIGを非推奨化し、FLT_HAS_SUBNORM・DBL_HAS_SUBNORM・LDBL_HAS_SUBNORMを廃止予定 (obsolescent) とした
    • <climits>: 各整数型の幅 (ビット数) を表すBOOL_WIDTH等のマクロを追加
    • <cstdint>: 各整数型の幅 (ビット数) を表すINT8_WIDTH等のマクロと、__STDC_VERSION_STDINT_H__を追加
    • <cstring>: memccpy()・strdup()・strndup()・memset_explicit()を追加
    • <cuchar>: mbrtoc8()・c8rtomb()・__STDC_VERSION_UCHAR_H__を追加
    • <cstddef>: unreachableマクロおよび__STDC_VERSION_STDDEF_H__は定義しないことを明記
You are visitor 01402503 — GeezerVison does not store the pages you look up.
Best viewed with Netscape Navigator 4.7 or Internet Explorer 6 at 800×600. No cookies required.