このページはC++20に採用された言語機能の変更を解説しています。
のちのC++規格でさらに変更される場合があるため関連項目を参照してください。
概要
言語機能
マクロ名 | 値 | 機能 |
---|---|---|
__cpp_aggregate_paren_init |
201902L |
丸カッコの値リストからの集成体初期化を許可 |
__cpp_char8_t |
201811L |
UTF-8エンコーディングされた文字の型としてchar8_t を追加 |
__cpp_concepts |
201907L |
コンセプト |
__cpp_conditional_explicit |
201806L |
関数を条件付きでexplicit にする構文を追加 |
__cpp_constexpr |
201907L 202002L |
定数式からの仮想関数の呼び出しを許可 定数式での dynamic_cast 、多態的なtypeid を許可constexpr関数内でのtry-catchブロックを許可 定数式内での共用体のアクティブメンバの変更を許可 constexpr関数内でのトリビアルなデフォルト初期化を許可 constexpr関数内で未評価のインラインアセンブリを許可することによる組み込み関数のconstexpr有効化 |
__cpp_constexpr_dynamic_alloc |
201907L |
可変サイズをもつコンテナのconstexpr 化 |
__cpp_constexpr_in_decltype |
201711L |
評価されない文脈での定数式評価によって特殊メンバ関数がインスタンス化されることを規定 |
__cpp_consteval |
201811L |
常に定数式評価するconsteval |
__cpp_constinit |
201907L |
コンパイル時初期化を強制するconstinit キーワードを追加 |
__cpp_deduction_guides |
201907L |
集成体クラステンプレートのテンプレート引数推論 エイリアステンプレート経由でのクラステンプレートのテンプレート引数推論 |
__cpp_designated_initializers |
201707L |
指示付き初期化 |
__cpp_generic_lambdas |
201707L |
ジェネリックラムダのテンプレート構文 |
__cpp_impl_coroutine |
201902L |
コルーチン |
__cpp_impl_destroying_delete |
201806L |
可変長データを扱うクラスの効率的なdelete |
__cpp_impl_three_way_comparison |
201907L |
<=> /== による比較演算子の自動定義 |
__cpp_init_captures |
201803L |
ラムダ式の初期化キャプチャでのパック展開を許可 |
__cpp_modules |
201907L |
モジュール |
__cpp_nontype_template_args |
201911L |
非型テンプレートパラメータとしてクラス型を許可する |
__cpp_using_enum |
201907L |
スコープ付き列挙型のusing宣言 |
ライブラリ
ライブラリの機能テストマクロは全て<version>
でも提供される。
マクロ名 | 値 | 機能 | ヘッダ |
---|---|---|---|
__cpp_lib_array_constexpr |
201803L 201806L 201811L |
std::array の完全constexpr 対応 |
<iterator> <array> |
__cpp_lib_assume_aligned |
201811L |
std::assume_aligned() |
<memory> |
__cpp_lib_atomic_flag_test |
201907L |
std::atomic_flag::test() |
<atomic> |
__cpp_lib_atomic_float |
201711L |
std::atomic の浮動小数点数型に対する特殊化 |
<atomic> |
__cpp_lib_atomic_lock_free_type_aliases |
201907L |
atomic_signed_lock_free/atomic_unsigned_lock_free |
<atomic> |
__cpp_lib_atomic_ref |
201806L |
std::atomic_ref |
<atomic> |
__cpp_lib_atomic_shared_ptr |
201711L |
std::atomic のstd::shared_ptr/std::weak_ptr に対する特殊化 |
<memory> |
__cpp_lib_atomic_value_initialization |
201911L |
std::atomic_flag の値初期化 |
<atomic> <memory> |
__cpp_lib_atomic_wait |
201907L |
std::atomic::wait() 、std::atomic::notify_one() 、std::atomic::notify_all() |
<atomic> |
__cpp_lib_barrier |
201907L |
<barrier> の追加 |
<barrier> |
__cpp_lib_bind_front |
201811L 201907L |
std::bind_front() |
<functional> |
__cpp_lib_bit_cast |
201806L |
std::bit_cast() |
<bit> |
__cpp_lib_bitops |
201907L |
<bit> の追加 |
<bit> |
__cpp_lib_bounded_array_traits |
201902L |
std::is_bounded_array 、std::is_unbounded_array |
<type_traits> |
__cpp_lib_char8_t |
201811L 201907L |
char8_t に対する特殊化の追加 |
<atomic> <filesystem> <istream> <limits> <locale> <ostream> <string> <string_view> |
__cpp_lib_chrono |
201907L |
カレンダーとタイムゾーン | <chrono> |
__cpp_lib_concepts |
202002L |
<concepts> の追加 |
<concepts> |
__cpp_lib_constexpr_algorithms |
201806L |
多くのアルゴリズムにconstexpr を追加 |
<algorithm> |
__cpp_lib_constexpr_complex |
201711L |
std::complex のconstexpr 対応 |
<complex> |
__cpp_lib_constexpr_dynamic_alloc |
201907L |
std::destroy_at ファミリとstd::allocator /std::alocator_traits のconstexpr 対応std::construct_at |
<memory> |
__cpp_lib_constexpr_functional |
201907L |
std::invoke 、std::reference_wrapper 、std::not_fn 、std::bind_front 、std::bind 、std::mem_fn のconstexpr 対応 |
<functional> |
__cpp_lib_constexpr_iterator |
201811L |
back_insert_iterator 、front_insert_iterator 、insert_iterator のconstexpr 対応 |
<iterator> |
__cpp_lib_constexpr_memory |
201811L |
std::pointer_traits のconstexpr 対応 |
<memory> |
__cpp_lib_constexpr_numeric |
201911L |
<numeric> の数値アルゴリズムのconstexpr 対応 |
<numeric> |
__cpp_lib_constexpr_string |
201907L |
std::string のconstexpr 対応 |
<string> |
__cpp_lib_constexpr_string_view |
201811L |
std::string_view::copy のconstexpr 対応 |
<string_view> |
__cpp_lib_constexpr_tuple |
201811L |
std::tuple のconstexpr 追加対応(一部のコンストラクタと代入演算子) |
<tuple> |
__cpp_lib_constexpr_utility |
201811L |
std::pair のconstexpr 追加対応(一部のコンストラクタと代入演算子) |
<utility> |
__cpp_lib_constexpr_vector |
201907L |
std::vector のconstexpr 対応 |
<vector> |
__cpp_lib_coroutine |
201902L |
<coroutine> ヘッダの追加 |
<coroutine> |
__cpp_lib_destroying_delete |
201806L |
std::destroying_delete_t |
<new> |
__cpp_lib_endian |
201907L |
std::endian |
<bit> |
__cpp_lib_erase_if |
202002L |
各コンテナに対するstd::erase 、std::erase_if の特殊化 |
<string> <deque> <forward_list> <list> <vector> <map> <set> <unordered_map> <unordered_set> |
__cpp_lib_execution |
201902L |
std::execution::unsequenced_policy |
<execution> |
__cpp_lib_format |
201907L 202106L 202110L |
<format> ヘッダコンパイル時フォーマット文字列検査/ std::vformat のコードサイズ削減std::chrono のフォーマットにおけるロケール指定の修正/const だとフォーマットできない型に対する対応 |
<format> |
__cpp_lib_generic_unordered_lookup |
201811L |
非順序連想コンテナのfind(), count(), contains(), equal_range() に対するHeterogeneous Overload追加 |
<unordered_map> <unordered_set> |
__cpp_lib_int_pow2 |
202002L |
<bit> の2の冪乗に関する操作を行う関数の名前変更 |
<bit> |
__cpp_lib_integer_comparison_functions |
202002L |
std::cmp_equal() 等の整数比較関数とstd::in_range() |
<utility> |
__cpp_lib_interpolate |
201902L |
std::lerp() とstd::midpoint() |
<cmath> <numeric> |
__cpp_lib_is_constant_evaluated |
201811L |
std::is_constant_evaluated() |
<type_traits> |
__cpp_lib_is_layout_compatible |
201907L |
std::is_layout_compatible とis_corresponding_member |
<type_traits> |
__cpp_lib_is_nothrow_convertible |
201806L |
std::is_nothrow_convertible |
<type_traits> |
__cpp_lib_is_pointer_interconvertible |
201907L |
std::is_corresponding_member とstd::is_pointer_interconvertible_base_of |
<type_traits> |
__cpp_lib_jthread |
201911L |
std::jthread とstop_token による協調的キャンセル機構 |
<stop_token> <thread> |
__cpp_lib_latch |
201907L |
std::latch |
<latch> |
__cpp_lib_list_remove_return_type |
201806L |
std::list とstd::forward_list のremove(), remove_if(), unique() の戻り値型変更 |
<forward_list> <list> |
__cpp_lib_math_constants |
201907L |
数学定数 | <numbers> |
__cpp_lib_polymorphic_allocator |
201902L |
std::pmr::polymorphic_allocator の改修 |
<memory> |
__cpp_lib_ranges |
201911L 202106L 202110L |
RangeライブラリとRangeアルゴリズムview コンセプトのデフォルト構築要求を削除所有権を持つ view の許可とowning_view |
<algorithm> <functional> <iterator> <memory> <ranges> |
__cpp_lib_remove_cvref |
201711L |
std::remove_cvref |
<type_traits> |
__cpp_lib_semaphore |
201907L |
std::counting_semaphore とstd::binary_semaphore |
<semaphore> |
__cpp_lib_shared_ptr_arrays |
201707L |
std::make_shared とstd::allocate_shared の配列対応 |
<memory> |
__cpp_lib_shift |
201806L |
std::shift_left とstd::shift_right |
<algorithm> |
__cpp_lib_smart_ptr_for_overwrite |
202002L |
std::make_shared_for_overwrite() とstd::allocate_shared_for_overwrite() |
<memory> |
__cpp_lib_source_location |
201907L |
std::source_location |
<source_location> |
__cpp_lib_span |
202002L |
std::span |
<span> |
__cpp_lib_ssize |
201902L |
std::ssize() とstd::span で使用する整数型の符号なし(size_t )への変更 |
<iterator> |
__cpp_lib_starts_ends_with |
201711L |
std::string とstd::string_view のstarts_with() とends_with() |
<string> <string_view> |
__cpp_lib_string_view |
201803L |
std::string とstd::string_view のイテレータのconstexpr 対応 |
<string> <string_view> |
__cpp_lib_syncbuf |
201803L |
同期化出力ストリーム(std::osyncstream )とバッファ(std::syncbuf ) |
<syncstream> |
__cpp_lib_three_way_comparison |
201907L |
標準ライブラリの三方比較演算子対応 | <compare> |
__cpp_lib_to_address |
201711L |
std::to_address() |
<memory> |
__cpp_lib_to_array |
201907L |
std::to_array() |
<array> |
__cpp_lib_type_identity |
201806L |
std::type_identity |
<type_traits> |
__cpp_lib_unwrap_ref |
201811L |
std::unwrap_reference とstd::unwrap_ref_decay |
<type_traits> |