名前空間
変種
操作

C++23

From cppreference.com
< cpp

C++標準の現在のリビジョンです。

目次

[編集] 新しい言語機能

void f(int& x)
{
    if (x)
        goto END;
    x = 42;
END:
}
  • 初期化文におけるエイリアス宣言 (using) (P2360R0)、例:
for (using T = int; T e : v)
    /* ... */

[編集] 新しいライブラリ機能

[編集] 新しいモジュール

[編集] 新しいヘッダ

C互換ヘッダ

[編集] ライブラリ機能

[編集] 汎用ユーティリティ
[編集] コルーチンライブラリ
[編集] 診断
[編集] アルゴリズム、イテレータ、範囲
[編集] コンテナ
[編集] コンパイル時サポート
[編集] メモリ管理
[編集] 文字列とテキスト処理
[編集] I/Oと出力

[編集] 時代遅れの機能

[編集] 削除された機能
  • ガベージコレクションのサポートと到達可能性ベースのリーク検出。 (P2186R2)
  • 混在したワイド文字列リテラルの連結のサポート、例:const auto* no = u"q" U"p" は不適格となる。 (P2201R1)
  • エンコード不可能なワイド文字リテラルとマルチキャラクタワイド文字リテラル、例:wchar_t x = 'db' は不適格となる。 (P2362R3)
[編集] 非推奨の機能
[編集] 非推奨からの復帰
  • 添字式内の operator, (コンマ演算子) (ただし、意味はオーバーロード可能な多次元添字 operator[] をサポートするように変更された)。
  • 一部のCヘッダ (Cとの互換性のための対応する <*.h> ヘッダ) (P2340R1)

[編集] 欠陥報告

[編集] コンパイラサポート

メイン記事: C++23 コンパイラサポート

[編集] C++23 コア言語機能

C++23 機能

 
提案文書

 
GCC
Clang
MSVC
Apple Clang
EDG eccp
Intel C++
Nvidia HPC C++ (旧 PGI)*
Nvidia nvcc
Cray
(符号付き) size_t のためのリテラル接尾辞  (FTM)* P0330R8 11 13 19.43* 13.1.6* 6.5 2022.2 23.9
ラムダ() をより省略可能にする P1102R2 11 13 19.44* 13.1.6* 6.3 2022.2 22.5
if consteval  (FTM)* P1938R3 12 14 19.44* 14.0.0* 6.3 2022.2 24.1
ガベージコレクションサポートの削除 P2186R2 12 N/A 19.30* N/A N/A
static_assertconstexpr if での文脈的な縮小変換 P1401R5 9 13 (部分的)*
14
14.0.0* 2022.2 20.7
行連結前の空白の除去 P2223R2 はい はい はい 6.7 2022.2 はい
宣言順レイアウトを必須にする P1847R4 はい はい はい はい 2022.2 はい
混在したワイド文字列リテラルの連結の削除 P2201R1 はい はい はい はい はい はい はい
明示的なオブジェクトメンバ関数 (deducing this)  (FTM)* P0847R7 14 18
19*
19.32*
(部分的)*
19.43*
6.3 22.5
auto(x)auto{x}  (FTM)* P0849R8 12 15 14.0.3* 6.4 2022.2 23.3
#elifdef#elifndef P2334R1 12 13 19.40* 13.1.6* 6.5 2022.2 23.9
constexpr 関数内の非リテラル変数(とラベルとgoto)  (FTM)* P2242R3 12 15 19.43* 14.0.3* 6.3 2022.2 22.5
一貫性のある文字リテラルエンコーディング P2316R2 はい はい 19.30* はい はい 2022.2 はい
文字セットとエンコーディング P2314R4 10 はい はい はい 2022.2 はい
for ループの)初期化文を拡張してエイリアス宣言を許可 P2360R0 12 14 14.0.0* 2022.2
多次元添字演算子  (FTM)* P2128R6 12 15 19.42* 14.0.3* 2022.2
ラムダへの属性 P2173R1 9 13 19.44* 13.1.6* 6.6 2022.2 22.5
#warning P2437R1 はい* はい 15.0.0* 6.5 2023.2 はい
エンコード不可能なワイド文字リテラルとマルチキャラクタワイド文字リテラルの削除 P2362R3 13 14 15.0.0* 6.7 2023.2
複合文の末尾のラベル P2324R2 13 16 16.0.0* 6.5 2023.2 23.9
区切り文字付きエスケープシーケンス P2290R3 13 15 15.0.0* 6.7 2023.2
名前付きユニバーサル文字エスケープ  (FTM)* P2071R2 13 15 15.0.0* 6.7 2023.2
いくつかの constexpr 制限の緩和  (FTM)* P2448R2 13 17 (部分的)
19
2024.0 (部分的)
より単純な暗黙のムーブ  (FTM)* P2266R3 13 13 6.7 2022.2
static operator()  (FTM)* P1169R4 13 16 19.44* 16.0.0* 6.7 2023.2
オプションの拡張浮動小数点型の要件 P1467R9 13 N/A 6.4
継承コンストラクタからのクラステンプレート実引数推論 P2582R1 14
属性 [[assume]] P1774R8 13 19
ポータブルなソースファイルエンコーディングとしてのUTF-8のサポート P2295R6 13* 15* 19.0 (Update 2)** 15.0.0* 2023.2
static operator[]  (FTM)* P2589R1 13 16 19.44* 16.0.0* 6.7 2023.2
constexpr 関数内で static constexpr 変数を許可  (FTM)* P2647R1 13 16 16.0.0* 2023.2
範囲for文の初期化子における一時オブジェクトの寿命延長  (FTM)* P2644R1
P2718R0
CWG2659
15 19
DR11: ラムダの後置戻り値型のスコープを変更 P2036R3
P2579R0
17 2023.2
DR20: 意味のあるエクスポート P2615R1 15 17 (部分的)
DR20: consteval は上位に伝播する必要がある  (FTM)* P2564R3 14 17 16.0.0* 6.7 2024.0
DR98: Unicode Standard Annex 31 を使用した C++ 識別子構文 P1949R7 12 14 14.0.0* 6.4 2022.2
DR11: 重複した属性を許可 P2156R1 11 13 13.1.6* 6.5 23.9
DR20: 機能テストマクロ __cpp_concepts の値の調整 P2493R0 12 19.32* 6.4 23.3
DR98: 既存の実践に合わせてwchar_t の要件を緩和 P2460R2 はい はい はい 15.0.0* N/A 2023.2
DR11: 定数式で未知のポインタと参照を使用 P2280R4 14 20*
DR20: 探している等価演算子 P2468R2 13 16 16.0.0* 2023.2
DR20: char8_t の互換性と移植性の修正  (FTM)* P2513R4 13 16 19.34* 16.0.0* 2023.2
DR98/11: 診断ディレクティブの報告を明確化し、テンプレートコンテキストで非値依存式の static_assert を許可 CWG2518 13 17 16.0*
(部分的)*
19.40*
 

C++23 機能
 

提案文書
GCC
Clang
MSVC
Apple Clang
EDG eccp
Intel C++
Nvidia HPC C++ (旧 PGI)*
Nvidia nvcc
Cray

[編集] C++23 ライブラリ機能

C++23 機能

 
提案文書

 
GCC libstdc++
Clang libc++
MSVC STL
Apple Clang*
スタックトレースライブラリ  (FTM)* P0881R7
P2301R1
12 (部分的)*
14*
19.34*
<stdatomic.h>  (FTM)* P0943R6 12 15 19.31* 14.0.3*
std::is_scoped_enum  (FTM)* P1048R1 11 12 19.30* 13.0.0*
std::basic_string::contains(), std::basic_string_view::contains()  (FTM)* P1679R3 11 12 19.30* 13.0.0*
std::to_underlying  (FTM)* P1682R3 11 13 19.30* 13.1.6*
time_point<>::clock の要件を緩和 P2212R2 N/A N/A N/A N/A
アロケータインターフェースでのサイズフィードバックの提供  (FTM)* P0401R6 15 19.30* 14.0.3*
<spanstream>: std::span ベースのバッファを持つ文字列ストリーム  (FTM)* P0448R4 12 19.31*
std::out_ptr(), std::inout_ptr()  (FTM)* P1132R8 14 19 19.30*
constexpr type_info::operator==()  (FTM)* P1328R1 12 17 19.33**
19.34*
15.0.0*
std::stackstd::queue のイテレータペアコンストラクタ  (FTM)* P1425R4 12 14 19.31* 14.0.3*
コンテナの推論ガイドにおけるアロケータの非推論コンテキスト P1518R2 12* 13* 19.31** 13.1.6**
ranges::starts_with()ranges::ends_with()  (FTM)* P1659R3 17 (部分的)*
18
19.31* 16.0.0*
std::basic_stringstd::basic_string_viewnullptr からの構築を禁止 P2166R1 12 13 19.30* 13.1.6*
std::invoke_r()  (FTM)* P2136R3 12 17 19.31* 15.0.0*
std::basic_string_view の範囲コンストラクタ P1989R2 11 14 19.30* 14.0.3*
std::pair の転送コンストラクタのデフォルトテンプレート引数 P1951R1 14 14 19.30* 14.0.3*
ガベージコレクションと到達可能性ベースのリーク検出の削除(ライブラリサポート P2186R2 12 14 19.30* 14.0.3*
zip: views::zip, views::zip_transform, views::adjacent, views::adjacent_transform  (FTM)* P2321R2 13 15 (部分的)* 19.33*(部分的)***
19.37*
14.0.3*
連想コンテナの異種混合削除オーバーロード  (FTM)* P2077R3 19.32*
std::byteswap()  (FTM)* P1272R4 12 14 19.31* 14.0.3*
volatile T*出力 P1147R1 11.3 14 19.31* 14.0.3*
basic_string::resize_and_overwrite()  (FTM)* P1072R10 12 14 19.31* 14.0.3*
std::optional のためのモナド操作  (FTM)* P0798R8 12 14 19.32* 14.0.3*
std::move_only_function  (FTM)* P0288R9 12 19.32*
std::exchange に条件付き noexcept 指定を追加 P2401R0 12 14 19.25* 14.0.3*
std::spanstd::basic_string_viewTriviallyCopyable であることを要求 P2251R1 はい はい はい はい
「Cヘッダ」の状態の明確化 P2340R1 はい はい はい はい
<expected>  (FTM)* P0323R12
P2549R1
12 16 19.33* 15.0.0*
<cmath><cstdlib> の constexpr  (FTM)* P0533R9 4.6 (部分的)*
std::unreachable()  (FTM)* P0627R6 12 15 19.32* 14.0.3*
std::aligned_storagestd::aligned_union の非推奨化 P1413R3 13 16 19.33*
std::reference_constructs_from_temporarystd::reference_converts_from_temporary  (FTM)* P2255R2 13 (部分的)*
14
19
constexpr std::unique_ptr  (FTM)* P2273R3 12 16 19.33* 15.0.0*
ranges::to()、タグ付きコンストラクタ、insert および assign メンバ関数による範囲からのコンテナと文字列の構築  (FTM)*  (FTM)* P1206R7 14 (部分的)* 17 19.34* 15.0.0*
ユーザ定義範囲アダプタのパイプサポート (ranges::range_adaptor_closure, std::bind_back)  (FTM)*  (FTM)* P2387R3 13 (部分的)*
14
19 19.34*
ranges::iota(), ranges::shift_left(), ranges::shift_right()  (FTM)*  (FTM)* P2440R1 13 (部分的)* 19.34*
views::join_with  (FTM)* P2441R2 13 19.34*
views::chunkviews::slide  (FTM)*  (FTM)* P2442R1 13 19.33*
views::chunk_by  (FTM)* P2443R1 13 18 19.33* 16.0.0*
std::mdspan: 所有権を持たない多次元配列参照  (FTM)* P0009R18
P2599R2
P2604R0
P2613R1
P2763R1
17 (部分的)*
18
19.39* 15.0.0*
<flat_map>  (FTM)* P0429R9 15 20
<flat_set>  (FTM)* P1222R4 15
ranges::find_last(), ranges::find_last_if(), ranges::find_last_if_not()  (FTM)* P1223R5 13 19 19.36*
フリースタンディングライブラリ: 簡単な <utility>, <ranges>, <iterator> P1642R11 13* N/A
views::stride  (FTM)* P1899R3 13 19.34*
std::tuple とタプルライクなオブジェクト間の互換性  (FTM)* P2165R4 14 2.9 (部分的)* 19.36* (部分的)*
19.37*
部分的*
定数イテレータ、番兵、範囲の修正。views::as_const  (FTM)* P2278R4 13 19.35* (部分的)*
19.36*
範囲の書式設定  (FTM)* P2286R8 16 19.37*(部分的)*
19.39*(部分的)*
19.41*(部分的)*
19.42*
15.0.0*
デフォルトのコンテナ書式設定を改善  (FTM)* P2585R1 16 (部分的)*
17
19.42* 15.0.0*
書式付き出力ライブラリ <print>  (FTM)* P2093R14
P2539R4
14 17 (部分的)*
18
19.37* 15.0.0**
16.0.0*
std::thread::idstd::stacktrace書式設定  (FTM)* P2693R1 14 17 (部分的)* 19.38* 15.0.0*
std::to_chars()std::from_chars() の整数オーバーロードの constexpr  (FTM)* P2291R3 13 16 19.34* 15.0.0*
ranges::contains()ranges::contains_subrange()  (FTM)* P2302R4 13 19 19.34* 16.0.0**
範囲畳み込みアルゴリズム  (FTM)* P2322R6 13 19.35*
views::cartesian_product  (FTM)* P2374R4
P2540R1
13 19.37*
比較コンセプト (equality_comparable, totally_ordered, three_way_comparable) へのムーブ専用型のサポート追加  (FTM)* P2404R3 19.36*
非範囲アルゴリズムへの入力としての範囲イテレータ  (FTM)* P2408R5 19.34*
constexpr std::bitset  (FTM)* P2417R2 13 16 19.34* 15.0.0*
basic_string::substr() && P2438R2 16 19.34* 15.0.0*
views::as_rvalue  (FTM)* P2446R2 13 16 19.34* 15.0.0*
標準ライブラリモジュール  (FTM)* P2465R3 15* 17 (部分的)* 19.35*
(部分的)*
19.36*
std::forward_like()  (FTM)* P2445R1 14 16 19.34* 15.0.0*
std::fstream の排他モードのサポート  (FTM)* P2467R1 12 18 19.36* 16.0.0*
views::repeat  (FTM)* P2474R2 13 17 19.36* 15.0.0*
ムーブ専用型を許容するように範囲アダプタを緩和  (FTM)* P2494R2 14 17 19.34* 15.0.0*
std::basic_string_view の範囲コンストラクタは explicit であるべき P2499R0 12.2 16 19.34* 15.0.0*
std::generator: 範囲のための同期コルーチンジェネレータ  (FTM)* P2502R2
P2787R0
14 19.43*
std::apply に条件付き noexcept 指定を追加 P2517R1 10 18 19.34* 16.0.0*
明示的な寿命管理 (std::start_lifetime_as)  (FTM)* P2590R2
P2679R2
chrono 型のローカライズされた書式設定におけるエンコーディングの扱いを明確化  (FTM)* P2419R2 15* 19.34**
std::move_iterator は常に input_iterator であるべきではない  (FTM)* P2520R0 12.3* 17* 19.34** 15.0.0*
明示的なオブジェクト仮引数を持つ呼び出し演算子のための推論ガイドの更新 LWG3617 14 19.34*
static operator() のための推論ガイドの更新 P1169R4 13 16 19.39* 15.0.0*
拡張浮動小数点型の標準名とライブラリサポート P1467R9 13 19.37**
std::expected のためのモナド操作  (FTM)* P2505R5 13 17 19.36* 15.0.0*
views::enumerate  (FTM)* P2164R9 13 19.37*
std::is_implicit_lifetime  (FTM)* P2674R1 20
std::reference_wrapperstd::common_reference_t は参照型であるべき  (FTM)*  (FTM)* P2655R3 19.37*
std::allocator_traits のユーザによる特殊化を禁止 P2652R2 19 19.37*
std::numeric_limits::has_denorm の非推奨化 P2614R2 18 19.37* 16.0.0*
view の複数パラメータコンストラクタを explicit にする P2711R1 17 (部分的)* 19.36** 15.0.0*
DR20: Rangesをほんの少しだけ緩和する  (FTM)* P2609R3 15 20 19.37*
DR20: 適切なフラット化のためのスタッシュイテレータのスタッシュ P2770R0 14 18 19.37*
DR17: std::variant から派生したクラスに対する std::visit()  (FTM)* P2162R2 11.3 13 19.20**
19.30*
13.1.6*
DR20: 条件付きでborrowされるrange P2017R1 11 16 19.30*
DR20: 入力rangeアダプタstd::counted_iteratorの修正 P2259R1 12 19.30*(一部)*
19.31*
DR20: views::join は全てのrangeのviewをjoinすべき P2328R1 11.2 15 19.30* 14.0.3*
DR20: viewdefault_initializable を要求しない  (FTM)* P2325R3 11.3 16 19.30* 15.0.0*
DR20: Rangeアダプタオブジェクトは引数を値で束縛する P2281R1 11 14 19.29 (16.10)*
(部分的)*
19.31*
14.0.3*
DR20: std::optionalstd::variantconstexpr 対応  (FTM)*  (FTM)* P2231R1 11.3 (一部)*
12
13 (部分的)*
19
19.31* 13.1.6* (部分的)
DR20: views::lazy_split と再設計された views::split P2210R2 12 16 19.31* 15.0.0*
DR20: ranges::istream_view の修正 P2432R1 12 16 19.31* 15.0.0*
DR20: 所有権を持つ view  (FTM)* P2415R2 12 14 19.31* 14.0.3*
DR20: chronoフォーマッタにおけるロケールハンドリングの修正  (FTM)* P2372R3
P2418R2
13 19.31*
DR20: integer-class型の整理 P2393R1 19.32*
DR20: コンパイル時の書式文字列チェック、std::format() ファミリーのバイナリコードサイズの削減  (FTM)* P2216R3 13 14 (部分的)*
15
19.32* 14.0.3*
DR20: std::format に非constフォーマット可能な型のサポートを追加 P2418R2 13 15 19.32* 14.0.3*
DR20: std::basic_format_string P2508R1 13 15 19.35* 14.0.3*
DR20: ポイズンピルは毒性が強すぎる  (FTM)* P2602R2 14 19 19.36*
DR20: std::format のフィル文字の許容 P2572R1 14 17 19.37*
DR20: std::format の幅推定の改善 P2675R1 14 17 19.38*
DR20: std::barrier のフェーズ完了保証  (FTM)* P2588R3 19.28 (16.8)**
19.36*
 

C++23 機能
 

提案文書
GCC libstdc++
Clang libc++
MSVC STL
Apple Clang*

* - 星印*が付いているセルにカーソルを合わせると、追加のポップアップノートが表示されます。
DRnn - 「DR」の後の数字nnは、欠陥報告が適用される対象のC++リビジョンを示します。例: DR20 → C++20

[編集] 外部リンク

1.  C++23 - Wikipedia
English 日本語 中文(简体) 中文(繁體)