Namespaces
Variants

C++ standard libraries extensions, version 2

From cppreference.net

C++ Library Fundamentals TS バージョン2、ISO/IEC TS 19568:2017では、 バージョン1 で定義されたコンポーネントに加えて、以下の新しいコンポーネントがC++標準ライブラリ向けに定義されています:

目次

C++ 検出イディオム

定義ヘッダー <experimental/type_traits>
テンプレートIDが適正に形成されているかどうかを検出する
エイリアステンプレート
(エイリアステンプレート)
detected_t が失敗時に返すクラス型
(クラス)

ポインタライクオブジェクトのためのconst伝播ラッパー

定義済みヘッダー <experimental/propagate_const>
ポインタライクなオブジェクトのためのconst伝播ラッパー
(クラステンプレート)

非所有ポインタ

定義ヘッダー <experimental/memory>
所有権を持たないポインタを表すクラス
(クラステンプレート)

std::array の作成

ヘッダーで定義 <experimental/array>
(ライブラリ基盤 TS v2)
引数からサイズとオプションで要素型が推論される std::array オブジェクトを作成する
(関数テンプレート)

ostream_joiner

定義済みヘッダー <experimental/iterator>
隣接する要素を区切り文字で分離しながら、連続する要素を出力ストリームに書き込む出力イテレータ
(クラステンプレート)

簡易乱数生成機能

各スレッドに対して、予測不可能な状態で初期化された型 std::default_random_engine per-thread engine が維持され、以下の関数で使用されます。

ヘッダーで定義 <experimental/random>
指定された範囲のランダムな整数を生成する
(関数テンプレート)
スレッドごとの乱数エンジンを再シードする
(関数)
ヘッダーで定義 <experimental/algorithm>
シーケンスからn個のランダムな要素を選択する
(関数テンプレート)
範囲内の要素をランダムに並べ替える
(関数テンプレート)

機能テストマクロ

定義済みヘッダー <experimental/type_traits>
__cpp_lib_experimental_logical_traits
少なくとも 201511 の値は、論理演算子型特性がサポートされていることを示す
(マクロ定数)
__cpp_lib_experimental_detect
少なくとも 201505 の値は、検出イディオムがサポートされていることを示す
(マクロ定数)
定義済みヘッダー <experimental/propagate_const>
__cpp_lib_experimental_propagate_const
少なくとも 201505 の値は、 propagate_const がサポートされていることを示す
(マクロ定数)
定義済みヘッダー <experimental/functional>
__cpp_lib_experimental_not_fn
少なくとも 201406 の値は、 not_fn がサポートされていることを示す
(マクロ定数)
定義済みヘッダー <experimental/memory>
__cpp_lib_experimental_observer_ptr
少なくとも 201411 の値は、 observer_ptr がサポートされていることを示す
(マクロ定数)
定義済みヘッダー <experimental/array>
__cpp_lib_experimental_make_array
少なくとも 201505 の値は、 make_array がサポートされていることを示す
(マクロ定数)
定義済みヘッダー <experimental/iterator>
__cpp_lib_experimental_ostream_joiner
少なくとも 201411 の値は、 ostream_joiner がサポートされていることを示す
(マクロ定数)
定義済みヘッダー <experimental/vector>
__cpp_lib_experimental_erase_if
少なくとも 201411 の値は、統一コンテナ消去がサポートされていることを示す
(マクロ定数)
定義済みヘッダー <experimental/numeric>
__cpp_lib_experimental_gcd_lcm
少なくとも 201411 の値は、 gcd lcm がサポートされていることを示す
(マクロ定数)
定義済みヘッダー <experimental/random>
__cpp_lib_experimental_randint
少なくとも 201511 の値は、 randint と関連関数がサポートされていることを示す
(マクロ定数)
定義済みヘッダー <experimental/source_location>
__cpp_lib_experimental_source_location
少なくとも 201505 の値は、 source_location がサポートされていることを示す
(マクロ定数)

C++17にマージ済み

以下のライブラリ fundamentals v2 コンポーネントは C++17 標準に採用されました。

void の可変長エイリアステンプレート
(エイリアステンプレート)
可変長論理ANDメタ関数
(クラステンプレート)
可変長論理ORメタ関数
(クラステンプレート)
論理NOTメタ関数
(クラステンプレート)
保持する関数オブジェクトの結果の補数を返す関数オブジェクトを作成する
(関数テンプレート)
定義ヘッダ <experimental/numeric>
constexpr 2つの整数の最大公約数を返す関数テンプレート
(関数テンプレート)
constexpr 2つの整数の最小公倍数を返す関数テンプレート
(関数テンプレート)

C++20にマージされました

ライブラリ基盤仕様 v2 の以下のコンポーネントが C++20 標準に採用されました。

統一コンテナ消去

ヘッダーで定義 <experimental/string>
std::basic_stringから特定の値に等しいすべての要素を削除する std::basic_string
(関数テンプレート)
述語を満たすすべての要素を std::basic_string から削除する
(関数テンプレート)
定義済みヘッダー <experimental/deque>
std::dequeから特定の値に等しいすべての要素を削除する std::deque
(関数テンプレート)
述語を満たすすべての要素を std::deque から削除する
(関数テンプレート)
ヘッダーで定義 <experimental/vector>
特定の値に等しいすべての要素を std::vector から削除する
(関数テンプレート)
述語を満たすすべての要素を std::vector から削除する
(関数テンプレート)
ヘッダーで定義 <experimental/forward_list>
特定の値に等しい全ての要素を std::forward_list から削除する
(関数テンプレート)
述語を満たすすべての要素を std::forward_list から削除する
(関数テンプレート)
ヘッダーで定義 <experimental/list>
特定の値に等しい全ての要素を std::list から削除する
(関数テンプレート)
述語を満たすすべての要素を std::list から削除する
(関数テンプレート)
ヘッダーで定義 <experimental/map>
述語を満たすすべての要素を std::map から削除する
(関数テンプレート)
std::multimap から述語を満たすすべての要素を削除する
(関数テンプレート)
ヘッダーで定義 <experimental/set>
述語を満たすすべての要素を std::set から削除する
(関数テンプレート)
述語を満たすすべての要素を std::multiset から削除する
(関数テンプレート)
ヘッダーで定義 <experimental/unordered_map>
述語を満たすすべての要素を std::unordered_map から削除する
(関数テンプレート)
述語を満たすすべての要素を std::unordered_multimap から削除する
(関数テンプレート)
ヘッダーで定義 <experimental/unordered_set>
述語を満たすすべての要素を std::unordered_set から削除する
(関数テンプレート)
述語を満たすすべての要素を std::unordered_multiset から削除する
(関数テンプレート)

ソースコード情報キャプチャ

ファイル名、行番号、関数名などのソースコード情報を表すクラス
(クラス)

std::array 変換

ヘッダーで定義 <experimental/array>
組み込み配列から std::array オブジェクトを作成する
(関数テンプレート)