最終更新日時(UTC): 2026年05月22日 03時23分59秒
Akira Takahashi が更新

履歴 編集

# 機能テストマクロ(C++26)

このページはC++26に採用された言語機能の変更を解説しています。

のちのC++規格でさらに変更される場合があるため関連項目を参照してください。

## 概要

### 言語機能

マクロ名 | 値 | 機能
--- | --- | ---
`__cpp_constexpr` | `202406L` | 定数式での`void*`からポインタ型へのキャストを許可 `constexpr`配置`new`
`__cpp_constexpr_exceptions` | `202411L` | 定数評価での例外送出を許可
`__cpp_constexpr_virtual_inheritance` | `202506L` | `constexpr`仮想継承を許可
`__cpp_contracts` | `202502L` | 契約プログラミングをサポートする
`__cpp_deleted_function` | `202403L` | 関数宣言を削除する理由を指定できるようにする
`__cpp_expansion_statements` | `202506L` | コンパイル時のタプルやリストを展開処理する`template for`文
`__cpp_impl_reflection` | `202506L` | 静的リフレクション
`__cpp_pack_indexing` | `202311L` | パラメータパックへのインデックスアクセスを許可
`__cpp_placeholder_variables` | `202306L` | 宣言のみで使用しない変数の名前として`_`をサポート
`__cpp_pp_embed` | `202502L` | ファイルを読み込む`#embed`命令を追加
`__cpp_static_assert` | `202306L` | `static_assert`の診断メッセージにユーザーが生成した文字列の指定を許可
`__cpp_structured_bindings` | `202411L` | 構造化束縛への属性を許可 構造化束縛でパックを導入できるようにする
`__cpp_template_parameters` | `202502L` | コンセプトと変数テンプレートをテンプレート引数として渡せるようにする
`__cpp_trivial_relocatability` | `202502L` | トリビアルな再配置
`__cpp_trivial_union` | `202502L` | 共用体の特殊メンバ関数のトリビアル化
`__cpp_variadic_friend` | `202403L` | 可変引数テンプレートで`friend`宣言をできるようにする

### ライブラリ

ライブラリの機能テストマクロは全て`<version>`でも提供される。

マクロ名 | 値 | 機能 | ヘッダ
--- | --- | --- | ---
`__cpp_lib_algorithm_default_value_type` | `202603L` | 一部アルゴリズムに、値を波カッコ初期化で渡せるよう制約を追加 (P3787R2で`uninitialized_fill`/`uninitialized_fill_n`を追加) | `<algorithm>`, `<ranges>`, `<string>`, `<deque>`, `<list>`, `<forward_list>`, `<vector>`, `<memory>`
`__cpp_lib_aligned_accessor` | `202411L` | `<mdspan>`に、要素アクセスにアライメント保証を与える`std::aligned_accessor`を追加 | `<mdspan>`
`__cpp_lib_associative_heterogeneous_insertion` | `202306L` | 連想コンテナの一部メンバ関数に、一時オブジェクト生成のコストを抑える拡張を追加 | `<map>`, `<set>`, `<unordered_map>`, `<unordered_set>`
`__cpp_lib_apply` | `202506L` | `std::apply`の戻り値型推論をやめて、戻り値型用の`std::apply_result`クラスを追加 | `<tuple>`, `<type_traits>`
`__cpp_lib_atomic_min_max` | `202506L` | `std::atomic`オブジェクトに対する2つの値の最大値・最小値を取得する関数を追加 | `<atomic>`
`__cpp_lib_atomic_reductions` | `202506L` | `std::atomic`と`std::atomic_ref`に高速な縮約用の操作を追加 | `<atomic>`
`__cpp_lib_atomic_ref` | `202411L` | `std::atomic_ref`に`address()`メンバ関数を追加 | `<atomic>`
`__cpp_lib_bind_back` | `202306L` | `std::bind_back()`に、非型テンプレート引数として関数を指定するオーバーロードを追加 | `<functional>`
`__cpp_lib_bind_front` | `202306L` | `std::bind_front()`に、非型テンプレート引数として関数を指定するオーバーロードを追加 | `<functional>`
`__cpp_lib_bitset` | `202306L` | `std::bitset`に、`std::basic_string_view`を受け取るコンストラクタを追加 | `<bitset>`
`__cpp_lib_chrono` | `202306L` | `<chrono>`のクラスに、ハッシュ値サポートとして`std::hash`の特殊化を追加 | `<chrono>`
`__cpp_lib_constant_wrapper` | `202506L` | `<type_traits>`に`std::constant_wrapper`を追加 | `<type_traits>`
`__cpp_lib_constexpr_algorithms` | `202306L` | `std::stable_sort()` / `std::ranges::stable_sort()`を`constexpr`対応 | `<algorithm>`, `<utility>`
`__cpp_lib_constexpr_atomic` | `202411L` | `<atomic>`ライブラリのアトミック操作を`constexpr`対応 | `<atomic>`
`__cpp_lib_constexpr_cmath` | `202306L` | `<cmath>`の関数 (特殊関数と丸めモードに依存する関数以外の全て) を`constexpr`対応 | `<cmath>`, `<cstdlib>`
`__cpp_lib_constexpr_complex` | `202306L` | `std::complex`の全関数を`constexpr`対応 | `<complex>`
`__cpp_lib_constexpr_deque` | `202502L` | `std::deque`を`constexpr`対応 | `<deque>`
`__cpp_lib_constexpr_exceptions` | `202502L` | 定数式での例外送出が許可されることにともない、例外クラスの関連機能を`constexpr`対応 | `<exception>`, `<stdexcept>`, `<expected>`, `<optional>`, `<variant>`, `<format>`
`__cpp_lib_constexpr_flat_map` | `202502L` | `std::flat_map` / `std::flat_multimap`を`constexpr`対応 | `<flat_map>`
`__cpp_lib_constexpr_flat_set` | `202502L` | `std::flat_set` / `std::flat_multiset`を`constexpr`対応 | `<flat_set>`
`__cpp_lib_constexpr_forward_list` | `202502L` | `std::forward_list`を`constexpr`対応 | `<forward_list>`
`__cpp_lib_constexpr_inplace_vector` | `202603L` | `std::inplace_vector`を`constexpr`対応 | `<inplace_vector>`
`__cpp_lib_constexpr_list` | `202502L` | `std::list`を`constexpr`対応 | `<list>`
`__cpp_lib_constexpr_map` | `202502L` | `std::map` / `std::multimap`を`constexpr`対応 | `<map>`
`__cpp_lib_constexpr_memory` | `202506L` | `std::shared_ptr`クラスとその関連機能を`constexpr`対応 | `<memory>`
`__cpp_lib_constexpr_new` | `202406L` | `constexpr`配置`new` | `<new>`
`__cpp_lib_constexpr_queue` | `202502L` | `std::queue` / `std::priority_queue`を`constexpr`対応 | `<queue>`
`__cpp_lib_constexpr_set` | `202502L` | `std::set` / `std::multiset`を`constexpr`対応 | `<set>`
`__cpp_lib_constexpr_stack` | `202502L` | `std::stack`を`constexpr`対応 | `<stack>`
`__cpp_lib_constexpr_unordered_map` | `202502L` | `std::unordered_map` / `std::unordered_multimap`を`constexpr`対応 | `<unordered_map>`
`__cpp_lib_constexpr_unordered_set` | `202502L` | `std::unordered_set` / `std::unordered_multiset`を`constexpr`対応 | `<unordered_set>`
`__cpp_lib_constrained_equality` | `202411L` | `std::reference_wrapper`に、比較演算子`==`と`<=>`を追加 | `<utility>`, `<tuple>`, `<optional>`, `<variant>`, `<expected>`
`__cpp_lib_contracts` | `202502L` | 契約プログラミングをサポートする | `<contracts>`
`__cpp_lib_copyable_function` | `202306L` | `<functional>`に`std::copyable_function`を追加 | `<functional>`
`__cpp_lib_counting_scope` | `202506L` | `<execution>`に`std::execution::spawn`、`std::execution::scope_token`などを追加 | `<execution>`
`__cpp_lib_debugging` | `202403L` | デバッグサポートのライブラリとして`<debugging>`を追加 | `<debugging>`
`__cpp_lib_define_static` | `202506L` |  | `<meta>`
`__cpp_lib_exception_ptr_cast` | `202603L` | `std::exception_ptr`を指定した例外型にキャストする`std::exception_ptr_cast()`関数を追加 | `<exception>`
`__cpp_lib_format` | `202603L` | `std::dynamic_format` | `<format>`
`__cpp_lib_format_path` | `202506L` | `std::filesystem::path`クラスに、文字列フォーマットのサポートを追加 `std::filesystem::path`クラスに、出力用の文字列を取得するためのメンバ関数を追加 | `<filesystem>`
`__cpp_lib_format_uchar` | `202311L` | `std::format`が`char`を数値出力する際は符号なしとして扱う | `<format>`
`__cpp_lib_freestanding_algorithm` | `202502L` |  | `<algorithm>`
`__cpp_lib_freestanding_array` | `202311L` |  | `<array>`
`__cpp_lib_freestanding_char_traits` | `202306L` |  | `<string>`
`__cpp_lib_freestanding_charconv` | `202306L` |  | `<charconv>`
`__cpp_lib_freestanding_cstdlib` | `202306L` |  | `<cstdlib>`, `<cmath>`
`__cpp_lib_freestanding_cstring` | `202311L` |  | `<cstring>`
`__cpp_lib_freestanding_cwchar` | `202306L` |  | `<cwchar>`
`__cpp_lib_freestanding_errc` | `202306L` |  | `<cerrno>`, `<system_error>`
`__cpp_lib_freestanding_execution` | `202502L` |  | `<execution>`
`__cpp_lib_freestanding_expected` | `202311L` |  | `<expected>`
`__cpp_lib_freestanding_feature_test_macros` | `202306L` |  |
`__cpp_lib_freestanding_functional` | `202306L` |  | `<functional>`
`__cpp_lib_freestanding_iterator` | `202306L` |  | `<iterator>`
`__cpp_lib_freestanding_mdspan` | `202311L` |  | `<mdspan>`
`__cpp_lib_freestanding_memory` | `202502L` |  | `<memory>`
`__cpp_lib_freestanding_numeric` | `202502L` |  | `<numeric>`
`__cpp_lib_freestanding_operator_new` | `202306L` or `0` |  | `<new>`
`__cpp_lib_freestanding_optional` | `202506L` |  | `<optional>`
`__cpp_lib_freestanding_random` | `202502L` |  | `<random>`
`__cpp_lib_freestanding_ranges` | `202306L` |  | `<ranges>`
`__cpp_lib_freestanding_ratio` | `202306L` |  | `<ratio>`
`__cpp_lib_freestanding_string_view` | `202311L` |  | `<string_view>`
`__cpp_lib_freestanding_tuple` | `202306L` |  | `<tuple>`
`__cpp_lib_freestanding_utility` | `202306L` |  | `<utility>`
`__cpp_lib_freestanding_variant` | `202311L` |  | `<variant>`
`__cpp_lib_fstream_native_handle` | `202306L` | `std::basic_fstream`などのメンバに、ファイルのネイティブハンドルを追加 | `<fstream>`
`__cpp_lib_function_ref` | `202306L` | `<functional>`に`std::function_ref`を追加 | `<functional>`
`__cpp_lib_hazard_pointer` | `202306L` | ハザードポインタのライブラリ`<hazard_pointer>`を追加 | `<hazard_pointer>`
`__cpp_lib_hive` | `202502L` | シーケンスコンテナのライブラリ`<hive>`を追加 | `<hive>`
`__cpp_lib_indirect` | `202502L` | `<memory>`に`std::indirect`と`std::polymorphic`を追加 | `<memory>`
`__cpp_lib_inplace_vector` | `202603L` | 容量固定の可変長配列のライブラリ`<inplace_vector>`を追加 | `<inplace_vector>`
`__cpp_lib_integer_sequence` | `202511L` | `std::integer_sequence`を構造化束縛と`template for`文で使用できるよう、タプルインタフェースの特殊化を追加 | `<utility>`
`__cpp_lib_is_sufficiently_aligned` | `202411L` | `<mdspan>`に、要素アクセスにアライメント保証を与える`std::aligned_accessor`を追加 | `<memory>`
`__cpp_lib_is_structural` | `202603L` | `<type_traits>`に`std::is_structural`を追加 | `<type_traits>`, `<meta>`
`__cpp_lib_is_virtual_base_of` | `202406L` | `<type_traits>`に`std::is_virtual_base_of`を追加 | `<type_traits>`
`__cpp_lib_is_within_lifetime` | `202306L` | `<type_traits>`に`std::is_within_lifetime()`を追加 | `<type_traits>`
`__cpp_lib_linalg` | `202412L` | 線形代数ライブラリとして`<linalg>`を追加 | `<linalg>`
`__cpp_lib_mdspan` | `202406L` | `std::mdspan`に対する`std::dextents`指定の冗長さを解決する`std::dims`を追加 | `<mdspan>`
`__cpp_lib_not_fn` | `202306L` | `std::not_fn()`に、非型テンプレート引数として関数を指定するオーバーロードを追加 | `<functional>`
`__cpp_lib_observable_checkpoint` | `202506L` | `<utility>`に`std::observable_checkpoint()`を追加 | `<utility>`
`__cpp_lib_optional` | `202506L` | `std::optional`に、参照を保持するための`T&`の部分特殊化を追加 | `<optional>`
`__cpp_lib_optional_range_support` | `202406L` | `std::optional`にイテレータインタフェースを追加 | `<optional>`
`__cpp_lib_out_ptr` | `202311L` |  | `<memory>`
`__cpp_lib_parallel_algorithm` | `202506L` | `<algorithm>`と`<memory>`のアルゴリズムを並列実行に対応 | `<algorithm>`, `<numeric>`, `<memory>`
`__cpp_lib_parallel_scheduler` | `202506L` | `<execution>`に`std::execution::parallel_scheduler`を追加 | `<execution>`
`__cpp_lib_philox_engine` | `202406L` | `<random>`に`std::philox_engine`、`std::philox4x32`、`std::philox4x64`を追加 | `<random>`
`__cpp_lib_polymorphic` | `202502L` | `<memory>`に`std::indirect`と`std::polymorphic`を追加 | `<memory>`
`__cpp_lib_print` | `202406L` | `std::print()`と`std::println()`にロックを取得せず高速に書き出す最適化を許可 `std::enable_nonlocking_formatter_optimization`を追加 | `<print>`, `<ostream>`
`__cpp_lib_ranges` | `202406L` | `std::indirectly_unary_invocable`などのコンセプトの共通参照要件を削除 | `<algorithm>`, `<functional>`, `<iterator>`, `<memory>`, `<ranges>`
`__cpp_lib_ranges_as_const` | `202311L` | `std::basic_const_iterator`を元の要素へのキャストを可能にする | `<ranges>`
`__cpp_lib_ranges_cache_latest` | `202411L` | `std::views::cache_latest`を追加 | `<ranges>`
`__cpp_lib_ranges_concat` | `202403L` | `std::views::concat`を追加 | `<ranges>`
`__cpp_lib_ranges_filter` | `202603L` | `std::ranges::filter_view`に、入力Rangeに対する`const`版の`begin()`/`end()`を追加 | `<ranges>`
`__cpp_lib_ranges_generate_random` | `202403L` | `<random>`に、乱数列を生成する`std::ranges::generate_random()`関数を追加 | `<random>`
`__cpp_lib_ranges_indices` | `202506L` | インデックス列を生成する`std::views::indices`を追加 | `<ranges>`
`__cpp_lib_ranges_reserve_hint` | `202502L` | 各viewクラスに`reserve_hint()`メンバ関数を追加 `std::ranges::reserve_hint()`関数を追加 `std::ranges::approximately_sized_range`コンセプトを追加 | `<ranges>`
`__cpp_lib_ranges_as_input` | `202502L` | `std::views::as_input`を追加 | `<ranges>`
`__cpp_lib_ratio` | `202306L` | `<ratio>`に、新たなSI接頭辞を追加 | `<ratio>`
`__cpp_lib_raw_memory_algorithms` | `202411L` | `std::uninitialized_default_construct()`などの未初期化領域に対する操作を`constexpr`対応 | `<memory>`
`__cpp_lib_rcu` | `202306L` | RCU (Read Copy Update) のライブラリとして`<rcu>`を追加 | `<rcu>`
`__cpp_lib_reference_wrapper` | `202403L` | `std::reference_wrapper`に、比較演算子`==`と`<=>`を追加 | `<functional>`
`__cpp_lib_reflection` | `202506L` | 静的リフレクションのライブラリ機能 | `<meta>`
`__cpp_lib_saturation_arithmetic` | `202603L` | `<numeric>`に飽和演算 (Saturation Arithmetic) として`std::saturating_add()`などの関数を追加 | `<numeric>`
`__cpp_lib_senders` | `202506L` |  | `<execution>`
`__cpp_lib_simd` | `202506L` | データ並列ライブラリとして、`<simd>`を追加 | `<simd>`
`__cpp_lib_simd_complex` | `202502L` | `<simd>`が`std::complex`をサポートする | `<simd>`
`__cpp_lib_simd_permutations` | `202506L` | `<simd>`に`permute()`などを追加する | `<simd>`
`__cpp_lib_smart_ptr_owner_equality` | `202306L` | `<memory>`に`std::owner_hash`と`std::owner_equal`を追加 | `<memory>`
`__cpp_lib_span` | `202311L` | `std::mdspan`に`at()`メンバ関数を追加 | `<span>`
`__cpp_lib_span_initializer_list` | `202311L` | `std::span`に`std::initializer_list`をとるコンストラクタを追加 | `<span>`
`__cpp_lib_sstream_from_string_view` | `202306L` | `std::basic_stringstream`などが`std::basic_string_view`から構築可能に | `<sstream>`
`__cpp_lib_string_subview` | `202506L` | `std::basic_string`と`std::basic_string_view`に`subview()`を追加 | `<string>`, `<string_view>`
`__cpp_lib_string_view` | `202403L` | `std::basic_string`と`std::basic_string_view`を連結させる`operator+`を追加 | `<string>`, `<string_view>`
`__cpp_lib_submdspan` | `202411L` | `std::mdspan`から部分ビューを取り出す`std::submdspan()`を追加 | `<mdspan>`
`__cpp_lib_task` | `202506L` |  | `<execution>`
`__cpp_lib_text_encoding` | `202306L` | 文字列エンコーディングを識別するライブラリ`<text_encoding>`を追加 | `<text_encoding>`
`__cpp_lib_to_chars` | `202306L` | `std::to_chars_result`と`std::from_chars_result`に`operator bool`を追加 | `<charconv>`
`__cpp_lib_to_string` | `202306L` | `std::to_string`の変換結果を`sprintf()`ベースから`std::format()`ベースに変更 | `<string>`
`__cpp_lib_trivially_relocatable` | `202502L` | トリビアルな再配置 | `<memory>`, `<type_traits>`
`__cpp_lib_tuple_like` | `202311L` | `std::complex`にタプルインタフェースの特殊化を追加 | `<utility>`, `<tuple>`, `<map>`, `<unordered_map>`
`__cpp_lib_type_order` | `202506L` | `std::type_order`を追加 | `<compare>`
`__cpp_lib_variant` | `202306L` | `std::variant`クラスに、メンバ関数版の`visit()`を追加 | `<variant>`

実装依存のマクロ。

マクロ名 | 値 | 機能 | ヘッダ
--- | --- | --- | ---
`__cpp_lib_hardened_array` | `202502L` |  | `<array>`
`__cpp_lib_hardened_basic_stacktrace` | `202506L` |  | `<stacktrace>`
`__cpp_lib_hardened_basic_string` | `202502L` |  | `<string>`
`__cpp_lib_hardened_basic_string_view` | `202502L` |  | `<string_view>`
`__cpp_lib_hardened_bitset` | `202502L` |  | `<bitset>`
`__cpp_lib_hardened_common_iterator` | `202506L` |  | `<iterator>`
`__cpp_lib_hardened_counted_iterator` | `202506L` |  | `<iterator>`
`__cpp_lib_hardened_deque` | `202502L` |  | `<deque>`
`__cpp_lib_hardened_expected` | `202502L` |  | `<expected>`
`__cpp_lib_hardened_forward_list` | `202502L` |  | `<forward_list>`
`__cpp_lib_hardened_inplace_vector` | `202502L` |  | `<inplace_vector>`
`__cpp_lib_hardened_list` | `202502L` |  | `<list>`
`__cpp_lib_hardened_mdspan` | `202502L` |  | `<mdspan>`
`__cpp_lib_hardened_optional` | `202502L` |  | `<optional>`
`__cpp_lib_hardened_shared_ptr_array` | `202506L` |  | `<memory>`
`__cpp_lib_hardened_span` | `202502L` |  | `<span>`
`__cpp_lib_hardened_valarray` | `202502L` |  | `<valarray>`
`__cpp_lib_hardened_vector` | `202502L` |  | `<vector>`
`__cpp_lib_hardened_view_interface` | `202506L` |  | `<ranges>`

## 参照

- SD-FeatureTest: Feature-Test Macros and Policies - isocpp