名前空間
変種
操作

C++20

提供: cppreference.com
< cpp

C++ 標準の次のメジャーな改訂です。

目次

[編集]新しい言語機能

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

[編集]新しいヘッダ

スレッドサポートライブラリ:

[編集]ライブラリ機能

[編集] 欠陥報告

C++20 で修正された欠陥報告 (コア135個、ライブラリ306個)

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

主記事: C++ コンパイラのサポート状況

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

C++20 の機能
 
文書
 
GCC
Clang
MSVC
Apple Clang
EDG eccp
Intel C++
IBM XLC++
Sun/Oracle C++
Embarcadero C++ Builder
Cray
Portland Group (PGI)
Nvidia nvcc
ラムダキャプチャ [=, this] を許容する P0409R28 6 19.22*

10.0.0*

5.1
__VA_OPT__P0306R4
P1042R1
8 (partial)*
10 (partial)*
9 19.25*

11.0.3*

5.1
指示付き初期化子P0329R44.7 (partial)*
8
3.0 (partial)*
10
19.21*(partial)*5.1
総称ラムダに対するテンプレート引数リスト P0428R28 9 19.22*

11.0.0*

5.1
ビットフィールドに対するデフォルトメンバ初期化子 P0683R18 6 19.25*

10.0.0*

5.1
クラステンプレートの実引数推定における初期化子リストコンストラクタ P0702R18 6 19.14*Yes 5.0
const& 修飾されたメンバポインタ P0704R18 6 19.0*

10.0.0*

5.1
コンセプトP0734R06
(TS only)
10
10 19.23*(partial)*6.1
非評価文脈におけるラムダ P0315R49
三方比較演算子P0515R310 8 (partial)
10
19.20*5.1
DR: 暗黙のラムダキャプチャの単純化 P0588R18 19.24*5.1
範囲ベースの for に対する初期化文 P0614R19 8 19.25*

11.0.0*

6.0
デフォルト構築可能かつ代入可能なステートレスラムダ P0624R29 8 19.22*

10.0.1*

5.1
デフォルト化されたコピーコンストラクタの const のミスマッチ P0641R29 8 19.21* (partial)

10.0.1*

5.1
特殊化におけるアクセスチェック P0692R1Yes 8 (partial) 19.26*

10.0.1* (partial)

5.1
ADL と可視でない関数テンプレート P0846R09 9 19.21*

11.0.3*

5.1
constexpr 関数の実体化の遅延 P0859R05.2 (partial)*
9
[[likely]] 属性と [[unlikely]] 属性 P0479R59 19.26*5.1
typename をよりオプショナルにする P0634R39 5.1
ラムダ式の初期化キャプチャにおけるパック展開 P0780R29 9 19.22*

11.0.3*

6.1
[[no_unique_address]] 属性 P0840R29 9

11.0.3*

5.1
DR: 構造化束縛のカスタマイゼーションポイント探索ルールの緩和 P0961R18 8 19.21*

10.0.1*

5.1
DR: 範囲 for ループのカスタマイゼーションポイント探索ルールの緩和 P0962R18 5.1
DR: アクセス可能なメンバへの構造化束縛を可能にする P0969R08 8 19.21*

10.0.1*

5.1
破棄削除演算子P0722R39 6 19.27*

10.0.0*

6.1
非型テンプレート引数におけるクラス型 P0732R29 19.26*
[=] による this の暗黙のキャプチャを非推奨にする P0806R29 19.22*5.1
explicit(bool)P0892R29 9 19.24*

11.0.3*

5.1
機能テストマクロの統合 P0941R25 3.4 19.15* (partial)
19.20*
Yes 5.0
ユーザ宣言されたコンストラクタを持つ集成体の禁止 P1008R19 8 19.20*

10.0.1*

5.1
constexpr 仮想関数 P1064R09 9

11.0.3*

5.1
比較に対する一貫性の改善 P1120R010 8 (partial)
10
19.22*

10.0.1* (partial)

5.1
char8_tP0482R69 7 19.22*

10.0.0*

5.1
std::is_constant_evaluated()P0595R29 9 19.25*

11.0.3*

5.1 19.1
constexpr try-catch ブロック P1002R19 8 19.25*

10.0.1*

5.1
即時関数P1073R310 (partial)*
11
5.1
ネストしたインライン名前空間P1094R29 8

10.0.1*

5.1
制約付き宣言のためのもうひとつの方法 P1141R210 19.26* (partial) 6.1
符号付き整数は2の補数である P1236R19 9

11.0.3*

N/A
constexpr dynamic_cast および多相 typeidP1327R110 9

11.0.3*

5.1
constexpr での共用体のアクティブメンバの変更 P1330R09 9 19.10*

11.0.3*

5.1
コルーチンP0912R510 8 (partial) 19.25*
19.28* (partial*)

10.0.1* (partial)

5.1
集成体の丸括弧初期化 P0960R310 5.1
DR: new 式における配列サイズの推定 P1009R29

11.0.3*

5.1
モジュールP1103R38 (partial) 19.25* (partial)

10.0.1* (partial)

より強い Unicode の要件 P1041R4
P1139R2
10 Yes 19.0* (P1041R4)
19.26* (P1139R2)
Yes N/A
<=> != ==P1185R210 10 19.22*5.1
DR: 異なる例外指定を用いて明示的にデフォルト化された関数 P1286R210 9

11.0.3*

5.1
構造化束縛のラムダキャプチャと記憶域クラス指定子 P1091R3
P1381R1
10 8 (partial)

10.0.1* (partial)

5.1
境界が未知な配列への変換を許可する P0388R410 6.0
constexpr なコンテナ操作 P0784R710 10 6.0
一部の volatile の使用方法を非推奨にする P1152R410 10 6.0
constinitP1143R210 10 6.1
添字内のコンマ演算子を非推奨にする P1161R310 9 19.25*

11.0.3*

6.0
メッセージ付きの [[nodiscard]]P1301R410 9 19.25*

11.0.3*

6.0
constexpr 関数内のトリビアルなデフォルト初期化 P1331R210 10 6.1
constexpr 関数内の評価されない asm 宣言 P1668R110 10 6.1
using enum P1099R519.24*
指定された比較カテゴリに対する三方比較の合成 P1186R310 10 19.24*6.0
DR: コンストラクタに対する [[nodiscard]]P1771R110 9 19.24*

11.0.3*

6.0
エイリアステンプレートに対するクラステンプレートの実引数推定P1814R010
集成体に対するクラステンプレートの実引数推定 P1816R0
P2082R1
10(P1816R0)
11(P2082R1)
DR: より多くのローカルオブジェクトおよび右辺値参照に対する暗黙のムーブP1825R019.24*6.0
値によるデフォルト比較を可能にする P1946R010 19.25*6.1
std::weak_equality および std::strong_equality の削除 P1959R010 19.25*6.1
非型テンプレート引数の非一貫性 P1907R19 19.26*
DR: 擬似デストラクタによるオブジェクトの生存期間の終了 P0593R611 N/A
DR: T* から bool への変換は縮小変換とみなされるべき P1957R210*
11*
6.1
C++20 の機能
 
文書
 
GCC
Clang
MSVC
Apple Clang
EDG eccp
Intel C++
IBM XLC++
Sun/Oracle C++
Embarcadero C++ Builder
Cray
Portland Group (PGI)
Nvidia nvcc

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

C++20 の機能
 
文書
 
GCC libstdc++
Clang libc++
MSVC の
標準ライブラリ
Apple Clang
Sun/Oracle C++ の
標準ライブラリ
Embarcadero C++ Builder の
標準ライブラリ
Cray C++ の
標準ライブラリ
std::endianP0463R18 7 19.22*

10.0.0*

配列をサポートするための std::make_shared() の拡張 P0674R119.27*
浮動小数点アトミック型 P0020R610 19.22*
同期されたバッファ付きostreamP0053R7
<algorithm> および <utility> に対する constexprP0202R310 8 (partial) 19.26*

10.0.1* (partial)

<complex> に対するさらなる constexprP0415R19 7 (partial) 19.27*

10.0.0* (partial)

std::memory_order をスコープ付き列挙にする P0439R09 9 19.25*

11.0.3*

文字列の接頭辞と接尾辞のチェック P0457R29 6 19.21*

10.0.0*

operator<=> に対するライブラリサポート (<compare>) P0768R110 7 (partial) 19.20* (partial)

10.0.0* (partial)

std::remove_cvrefP0550R29 6 19.20*

10.0.0*

標準ライブラリにおける [[nodiscard]]P0600R19 7 (partial) 19.13* (partial)
19.22*

10.0.0* (partial)

数値演算アルゴリズムstd::move を使用する P0616R09 19.23*
ポインタを生のポインタに変換するユーティリティ P0653R28 6 19.22*Yes
アトミックな std::shared_ptr および std::weak_ptrP0718R219.27*
std::spanP0122R710 7 19.26*

10.0.0*

カレンダータイムゾーンP0355R77 (partial)

10.0.0* (partial)

<version>P0754R29 7 19.22*

10.0.0*

非順序コンテナの比較 P0809R016.0*
ConstexprIterator 要件 P0858R09 19.11*
std::basic_string::reserve() は縮小するべきでない P0966R18 19.25*

10.0.1*

std::atomic_refP0019R810
連想コンテナの contains() メンバ関数 P0458R29 19.21*
DR: 区分的構築に対するコピー省略の保証 P0475R19
std::bit_cast()P0476R219.27*
2の整数乗演算P0556R3P1956R19 (P0556R3)
10 (P1956R1)
19.25* (P0556R3)*
19.27* (P1956R1)*
19.28*
erase ライクなアルゴリズムの戻り値の改善 P0646R19 10 19.21*
std::destroying_deleteP0722R39 9 19.27*

11.0.3*

std::is_nothrow_convertibleP0758R19 9 19.23*

11.0.3*

<algorithm>shift を追加する P0769R210 19.21*
std::swap() および swap 関連関数に対する constexpr P0879R010 19.26*
std::type_identityP0887R19 8 19.21*

10.0.1*

コンセプトライブラリP0898R310 19.23*
std::array に対する constexpr比較演算子P1023R010 8 19.27*

10.0.1*

std::unwrap_ref_decay および std::unwrap_referenceP0318R19 8 19.21*

10.0.1*

std::bind_front()P0356R59 19.25*
不完全型に対する std::reference_wrapperP0357R39 8 19.26*

10.0.1*

operator>>(basic_istream&, CharT*) の修正 P0487R18 19.23*

10.0.1*

char8_t のためのライブラリサポート P0482R69 19.22*
アロケータ使用構築を実装するためのユーティリティ関数P0591R49
DR: std::variant および std::optional はコピー/ムーブのトリビアル性を伝播するべき P0602R48.3 8 19.11*

10.0.1*

まともな std::variant の変換コンストラクタ P0608R310 9

11.0.3*

std::function のムーブコンストラクタは noexcept であるべき P0771R17.2 6 19.22*Yes
ひとつの範囲の提案P0896R410
非順序コンテナに対する型混合検索 P0919R3P1690R119.23* (P0919R3)
19.25* (P1690R1)
<chrono>zero()min()、および max()noexcept であるべき P0972R09 8 19.14*

10.0.1*

std::pointer_traitsconstexprP1006R19 8 19.26*

10.0.1*

std::assume_aligned()P1007R39
雑多な constexpr の寄せ集め P1032R110 19.28*
std::span の比較演算子を削除する P1085R210 8 19.26*

10.0.1*

operator+(basic_string) のステートフルなアロケータの伝播の一貫性の向上 P1165R110 19.26*
一貫性のあるコンテナ削除P1209R0P1115R39 (P1209R0)
10 (P1115R3)
8 (P1209R0)
11 (P1115R3)
19.25* (P1209R0)
19.27* (P1115R3)

10.0.1* (P1209R0)

std::lerp() および std::midpoint()P0811R39 9 19.23* (partial)

11.0.3*

std::span の利便性の改善 P1024R310 9 19.26*

11.0.3*

DR: create_directory() を直感的にする P1164R18.3 19.20*
std::ssize()std::span の符号なしエクステント P1227R210 9 19.25*

11.0.3*

境界が未知な配列境界が既知な配列のための型特性 P1357R19 9 19.25*

11.0.3*

std::to_array()P0325R410 10 19.25*
std::basic_stringbuf のバッファへの効率的なアクセス P0408R7
レイアウト互換性およびポインタ相互変換可能性の型特性 P0466R5
ビット操作P0553R49 9 19.25**
19.28*

11.0.3*

数学定数P0631R810 11 19.25*
テキストの書式化P0645R10
std::stop_tokenstd::jthreadP0660R1010
constexpr std::allocator および関連ユーティリティ P0784R710
constexpr std::stringP0980R1
constexpr std::vectorP1004R2
入力範囲アダプタP1035R710
constexpr std::invoke() および関連ユーティリティ P1065R210 19.28*
アトミックな待機および通知、 std::counting_semaphorestd::latch および std::barrierP1135R6
std::source_locationP1208R67 (TS only)
<=> を標準ライブラリに追加する P1614R210
std::atomic および std::atomic_flag の constexpr デフォルトコンストラクタ P0883R219.26*
数値演算アルゴリズムに対する constexpr P1645R110 19.26*
安全な整数型の比較 P0586R210 19.27*
C++20 の機能
 
文書
 
GCC libstdc++
Clang libc++
MSVC の
標準ライブラリ
Apple Clang
Sun/Oracle C++ の
標準ライブラリ
Embarcadero C++ Builder の
標準ライブラリ
Cray C++ の
標準ライブラリ

* - 注釈を見るにはバージョン番号にマウスポインタを当ててください

close