Standard library header <functional>
From cppreference.net
このヘッダは function objects ライブラリの一部であり、標準の hash function を提供します。
Namespaces |
|
| placeholders (C++11) | std::bind 式内の未束縛引数に対するプレースホルダーを提供する |
クラス |
|
ラッパー |
|
|
(C++11)
|
任意のコピー構築可能な呼び出し可能オブジェクトのコピー可能ラッパー
(クラステンプレート) |
|
(C++23)
|
指定された呼び出しシグネチャで修飾子をサポートする任意の呼び出し可能オブジェクトのmove-onlyラッパー
(クラステンプレート) |
|
(C++26)
|
指定された呼び出しシグネチャで修飾子をサポートする任意のコピー構築可能な呼び出し可能オブジェクトのコピー可能ラッパー
(クラステンプレート) |
|
(C++26)
|
任意の呼び出し可能オブジェクトの非所有ラッパー
(クラステンプレート) |
|
(C++11)
|
メンバポインタから関数オブジェクトを作成する
(関数テンプレート) |
|
(C++11)
|
CopyConstructible
および
CopyAssignable
参照ラッパー
(クラステンプレート) |
|
(C++20)
(C++20)
|
std::reference_wrapper
でラップされた参照型を取得する
(クラステンプレート) |
ヘルパークラス |
|
|
(C++11)
|
空の
std::function
を呼び出したときにスローされる例外
(クラス) |
|
(C++11)
|
オブジェクトが
std::bind
式であるか、またはそのように使用できることを示す
(クラステンプレート) |
|
(C++11)
|
オブジェクトが標準プレースホルダであるか、またはプレースホルダとして使用できることを示す
(クラステンプレート) |
算術演算 |
|
|
x
+
y
を実装する関数オブジェクト
(クラステンプレート) |
|
|
x
-
y
を実装する関数オブジェクト
(クラステンプレート) |
|
|
x * y を実装する関数オブジェクト
x
*
y
(クラステンプレート) |
|
|
x / y を実装する関数オブジェクト
x
/
y
(クラステンプレート) |
|
|
x % y を実装する関数オブジェクト
x
%
y
(クラステンプレート) |
|
|
-x を実装する関数オブジェクト
-
x
(クラステンプレート) |
|
比較 |
|
|
x == y を実装する関数オブジェクト
x
==
y
(クラステンプレート) |
|
|
x
!
=
y
を実装する関数オブジェクト
(クラステンプレート) |
|
|
x
>
y
を実装する関数オブジェクト
(クラステンプレート) |
|
|
x < y を実装する関数オブジェクト
x
<
y
(クラステンプレート) |
|
|
x >= y を実装する関数オブジェクト
x
>=
y
(クラステンプレート) |
|
|
x <= y を実装する関数オブジェクト
(クラステンプレート) |
|
Concept-constrained comparisons |
|
|
(C++20)
|
x == y を実装する制約付き関数オブジェクト
x
==
y
(クラス) |
|
(C++20)
|
x != y を実装する制約付き関数オブジェクト
x
!
=
y
(クラス) |
|
(C++20)
|
x > y を実装する制約付き関数オブジェクト
(クラス) |
|
(C++20)
|
x < y を実装する制約付き関数オブジェクト
(クラス) |
|
(C++20)
|
x >= y を実装する制約付き関数オブジェクト
x
>=
y
(クラス) |
|
(C++20)
|
x <= y を実装する制約付き関数オブジェクト
(クラス) |
|
(C++20)
|
x <=> y を実装する制約付き関数オブジェクト
x
<=>
y
(クラス) |
論理演算 |
|
|
x && y を実装する関数オブジェクト
x
&&
y
(クラステンプレート) |
|
|
関数オブジェクトの実装
x
||
y
(クラステンプレート) |
|
|
!
x
を実装する関数オブジェクト
(クラステンプレート) |
|
ビット演算 |
|
|
関数オブジェクト実装
x
&
y
(クラステンプレート) |
|
|
関数オブジェクトの実装
x
|
y
(クラステンプレート) |
|
|
関数オブジェクトを実装する
x
^
y
(クラステンプレート) |
|
|
(C++14)
|
~x を実装する関数オブジェクト
~x
(クラステンプレート) |
ネゲータ |
|
|
(C++17)
|
保持している関数オブジェクトの結果の補数を返す関数オブジェクトを作成する
(関数テンプレート) |
恒等式 |
|
|
(C++20)
|
引数を変更せずに返す関数オブジェクト
(クラス) |
サーチャー |
|
|
(C++17)
|
標準C++ライブラリの検索アルゴリズム実装
(クラステンプレート) |
|
(C++17)
|
Boyer-Moore検索アルゴリズムの実装
(クラステンプレート) |
|
(C++17)
|
Boyer-Moore-Horspool 検索アルゴリズムの実装
(クラステンプレート) |
ハッシュ法 |
|
|
(C++11)
|
ハッシュ関数オブジェクト
(クラステンプレート) |
|
std::hash
基本型、列挙型、ポインタ型のためのstd::hash特殊化
(クラステンプレートの特殊化) |
|
定数 |
|
|
名前空間
std::placeholders
で定義
|
|
|
(C++11)
|
std::bind式における未束縛引数のためのプレースホルダ
(定数) |
関数 |
|
|
(C++20)
(C++23)
|
可変個の引数を順に関数オブジェクトにバインドする
(関数テンプレート) |
|
(C++11)
|
関数オブジェクトに1つ以上の引数をバインドする
(関数テンプレート) |
|
(C++11)
(C++11)
|
引数から推論された型で
std::reference_wrapper
を作成する
(関数テンプレート) |
|
(C++17)
(C++23)
|
任意の
Callable
オブジェクトを指定された引数で呼び出し
、戻り値の型を指定可能
(C++23以降)
(関数テンプレート) |
C++11で非推奨となりC++17で削除された機能
基底クラス |
|
|
(C++11で非推奨)
(C++17で削除)
|
アダプタ互換な単項関数の基底クラス
(クラステンプレート) |
|
(C++11で非推奨)
(C++17で削除)
|
アダプタ互換な二項関数の基底クラス
(クラステンプレート) |
バインダ |
|
|
(C++11で非推奨)
(C++17で削除)
|
二項関数とその引数の1つを保持する関数オブジェクト
(クラステンプレート) |
|
(C++11で非推奨)
(C++17で削除)
|
二項関数に1つの引数をバインドする
(関数テンプレート) |
関数アダプタ |
|
|
(C++11で非推奨)
(C++17で削除)
|
単項関数へのポインタのアダプタ互換ラッパー
(クラステンプレート) |
|
(C++11で非推奨)
(C++17で削除)
|
二項関数へのポインタのアダプタ互換ラッパー
(クラステンプレート) |
|
(C++11で非推奨)
(C++17で削除)
|
関数ポインタからアダプタ互換な関数オブジェクトラッパーを作成する
(関数テンプレート) |
|
(C++11で非推奨)
(C++17で削除)
|
引数なしまたは単項メンバー関数へのポインタのラッパー(オブジェクトへのポインタで呼び出し可能)
(クラステンプレート) |
|
(C++11で非推奨)
(C++17で削除)
|
メンバー関数へのポインタからラッパーを作成する(オブジェクトへのポインタで呼び出し可能)
(関数テンプレート) |
|
(C++11で非推奨)
(C++17で削除)
|
引数なしまたは単項メンバー関数へのポインタのラッパー(オブジェクトへの参照で呼び出し可能)
(クラステンプレート) |
|
(C++11で非推奨)
(C++17で削除)
|
メンバー関数へのポインタからラッパーを作成する(オブジェクトへの参照で呼び出し可能)
(関数テンプレート) |
C++17で非推奨となり、C++20で削除されました
否定子 |
|
|
(C++17で非推奨)
(C++20で削除)
|
保持する単項述語の補数を返すラッパー関数オブジェクト
(クラステンプレート) |
|
(C++17で非推奨)
(C++20で削除)
|
保持する二項述語の補数を返すラッパー関数オブジェクト
(クラステンプレート) |
|
(C++17で非推奨)
(C++20で削除)
|
カスタム
std::unary_negate
オブジェクトを構築する
(関数テンプレート) |
|
(C++17で非推奨)
(C++20で削除)
|
カスタム
std::binary_negate
オブジェクトを構築する
(関数テンプレート) |
概要
namespace std { // invoke template<class F, class... Args> constexpr invoke_result_t<F, Args...> invoke(F&& f, Args&&... args) noexcept(is_nothrow_invocable_v<F, Args...>); template<class R, class F, class... Args> constexpr R invoke_r(F&& f, Args&&... args) noexcept(is_nothrow_invocable_r_v<R, F, Args...>); // reference_wrapper template<class T> class reference_wrapper; template<class T> constexpr reference_wrapper<T> ref(T&) noexcept; template<class T> constexpr reference_wrapper<const T> cref(const T&) noexcept; template<class T> void ref(const T&&) = delete; template<class T> void cref(const T&&) = delete; template<class T> constexpr reference_wrapper<T> ref(reference_wrapper<T>) noexcept; template<class T> constexpr reference_wrapper<const T> cref(reference_wrapper<T>) noexcept; template<class T> struct unwrap_reference; template<class T> using unwrap_reference_t = typename unwrap_reference<T>::type; template<class T> struct unwrap_ref_decay; template<class T> using unwrap_ref_decay_t = typename unwrap_ref_decay<T>::type; // common_reference 関連の特殊化 template<class R, class T, template<class> class RQual, template<class> class TQual> requires /* 下記参照 */ struct basic_common_reference<R, T, RQual, TQual>; template<class T, class R, template<class> class TQual, template<class> class RQual> requires /* 下記参照 */ struct basic_common_reference<T, R, TQual, RQual>; // 算術演算 template<class T = void> struct plus; template<class T = void> struct minus; template<class T = void> struct multiplies; template<class T = void> struct divides; template<class T = void> struct modulus; template<class T = void> struct negate; template<> struct plus<void>; template<> struct minus<void>; template<> struct multiplies<void>; template<> struct divides<void>; template<> struct modulus<void>; template<> struct negate<void>; // 比較 template<class T = void> struct equal_to; template<class T = void> struct not_equal_to; template<class T = void> struct greater; template<class T = void> struct less; template<class T = void> struct greater_equal; template<class T = void> struct less_equal; template<> struct equal_to<void>; template<> struct not_equal_to<void>; template<> struct greater<void>; template<> struct less<void>; template<> struct greater_equal<void>; template<> struct less_equal<void>; // 論理演算 template<class T = void> struct logical_and; template<class T = void> struct logical_or; template<class T = void> struct logical_not; template<> struct logical_and<void>; template<> struct logical_or<void>; template<> struct logical_not<void>; // ビット演算 template<class T = void> struct bit_and; template<class T = void> struct bit_or; template<class T = void> struct bit_xor; template<class T = void> struct bit_not; template<> struct bit_and<void>; template<> struct bit_or<void>; template<> struct bit_xor<void>; template<> struct bit_not<void>; // identity struct identity; // 関数テンプレート not_fn template<class F> constexpr /* 未指定 */ not_fn(F&& f); // 関数テンプレート bind_front と bind_back template<class F, class... Args> constexpr /* 未指定 */ bind_front(F&&, Args&&...); template<class F, class... Args> constexpr /* 未指定 */ bind_back(F&&, Args&&...); // bind template<class T> struct is_bind_expression; template<class T> inline constexpr bool is_bind_expression_v = is_bind_expression<T>::value; template<class T> struct is_placeholder; template<class T> inline constexpr int is_placeholder_v = is_placeholder<T>::value; template<class F, class... BoundArgs> constexpr /* 未指定 */ bind(F&&, BoundArgs&&...); template<class R, class F, class... BoundArgs> constexpr /* 未指定 */ bind(F&&, BoundArgs&&...); namespace placeholders { // M は実装定義のプレースホルダー数です /* 説明を参照 */ _1; /* 説明を参照 */ _2; . . . /* 説明を参照 */ _M; } // メンバー関数アダプタ template<class R, class T> constexpr /* 未指定 */ mem_fn(R T::*) noexcept; // ポリモーフィック関数ラッパー class bad_function_call; template<class> class function; // 未定義 template<class R, class... ArgTypes> class function<R(ArgTypes...)>; template<class R, class... ArgTypes> void swap(function<R(ArgTypes...)>&, function<R(ArgTypes...)>&) noexcept; template<class R, class... ArgTypes> bool operator==(const function<R(ArgTypes...)>&, nullptr_t) noexcept; // move-only ラッパー template<class...> class move_only_function; // 未定義 template<class R, class... ArgTypes> class move_only_function<R(ArgTypes...) /*cv ref*/ noexcept(/*noex*/)>; // コピー可能なラッパー template<class...> class copyable_function; // 未定義 template<class R, class... ArgTypes> class copyable_function<R(ArgTypes...) /*cv ref*/ noexcept(/*noex*/)>; // 非所有権ラッパー template<class...> class function_ref; // 未定義 template<class R, class... ArgTypes> class function_ref<R(ArgTypes...) /*cv*/ noexcept(/*noex*/)>; // サーチャー template<class ForwardIter, class BinaryPredicate = equal_to<>> class default_searcher; template<class RandomAccessIter, class Hash = hash<typename iterator_traits<RandomAccessIter>::value_type>, class BinaryPredicate = equal_to<>> class boyer_moore_searcher; template<class RandomAccessIter, class Hash = hash<typename iterator_traits<RandomAccessIter>::value_type>, class BinaryPredicate = equal_to<>> class boyer_moore_horspool_searcher; // ハッシュ関数プライマリテンプレート template<class T> struct hash; // コンセプト制約付き比較 struct compare_three_way; namespace ranges { struct equal_to; struct not_equal_to; struct greater; struct less; struct greater_equal; struct less_equal; } // 説明専用 template<class Fn, class... Args> concept /*呼び出し可能*/ = requires (Fn&& fn, Args&&... args) { std::forward<Fn>(fn)(std::forward<Args>(args)...); }; // 説明専用 template<class Fn, class... Args> concept /*nothrow-callable*/ = /*呼び出し可能*/<Fn, Args...> && requires (Fn&& fn, Args&&... args) { { std::forward<Fn>(fn)(std::forward<Args>(args)...) } noexcept; }; // 説明専用 template<class Fn, class... Args> using /*call-result-t*/ = decltype(std::declval<Fn>()(std::declval<Args>()...)); // 説明専用 template<const auto& T> using /*decayed-typeof*/ = decltype(auto(T)); }
クラステンプレート std::reference_wrapper
namespace std { template<class T> class reference_wrapper { public: // 型 using type = T; // 構築/コピー/破棄 template<class U> constexpr reference_wrapper(U&&) noexcept(/* 詳細は後述 */); constexpr reference_wrapper(const reference_wrapper& x) noexcept; // 代入 constexpr reference_wrapper& operator=(const reference_wrapper& x) noexcept; // アクセス constexpr operator T& () const noexcept; constexpr T& get() const noexcept; // 呼び出し template<class... ArgTypes> constexpr invoke_result_t<T&, ArgTypes...> operator()(ArgTypes&&...) const noexcept(is_nothrow_invocable_v<T&, ArgTypes...>); // 比較 friend constexpr bool operator==(reference_wrapper, reference_wrapper); friend constexpr bool operator==(reference_wrapper, const T&); friend constexpr bool operator==(reference_wrapper, reference_wrapper<const T>); friend constexpr auto operator<=>(reference_wrapper, reference_wrapper); friend constexpr auto operator<=>(reference_wrapper, const T&); friend constexpr auto operator<=>(reference_wrapper, reference_wrapper<const T>); }; // 推論ガイド template<class T> reference_wrapper(T&) -> reference_wrapper<T>; }
クラステンプレート std::unwrap_reference
namespace std { template<class T> struct unwrap_reference; }
クラステンプレート std::unwrap_ref_decay
namespace std { template<class T> struct unwrap_ref_decay; }
クラステンプレート std::plus
namespace std { template<class T = void> struct plus { constexpr T operator()(const T& x, const T& y) const; }; template<> struct plus<void> { template<class T, class U> constexpr auto operator()(T&& t, U&& u) const -> decltype(std::forward<T>(t) + std::forward<U>(u)); using is_transparent = /* 未指定 */; }; }
クラステンプレート std::minus
namespace std { template<class T = void> struct minus { constexpr T operator()(const T& x, const T& y) const; }; template<> struct minus<void> { template<class T, class U> constexpr auto operator()(T&& t, U&& u) const -> decltype(std::forward<T>(t) - std::forward<U>(u)); using is_transparent = /* 未指定 */; }; }
クラステンプレート std::multiplies
namespace std { template<class T = void> struct multiplies { constexpr T operator()(const T& x, const T& y) const; }; template<> struct multiplies<void> { template<class T, class U> constexpr auto operator()(T&& t, U&& u) const -> decltype(std::forward<T>(t) * std::forward<U>(u)); using is_transparent = /* 未指定 */; }; }
クラステンプレート std::divides
namespace std { template<class T = void> struct divides { constexpr T operator()(const T& x, const T& y) const; }; template<> struct divides<void> { template<class T, class U> constexpr auto operator()(T&& t, U&& u) const -> decltype(std::forward<T>(t) / std::forward<U>(u)); using is_transparent = /* 未指定 */; }; }
クラステンプレート std::modulus
namespace std { template<class T = void> struct modulus { constexpr T operator()(const T& x, const T& y) const; }; template<> struct modulus<void> { template<class T, class U> constexpr auto operator()(T&& t, U&& u) const -> decltype(std::forward<T>(t) % std::forward<U>(u)); using is_transparent = /* 未指定 */; }; }
クラステンプレート std::negate
namespace std { template<class T = void> struct negate { constexpr T operator()(const T& x) const; }; template<> struct negate<void> { template<class T> constexpr auto operator()(T&& t) const -> decltype(-std::forward<T>(t)); using is_transparent = /* 未指定 */; }; }
クラステンプレート std::equal_to
namespace std { template<class T = void> struct equal_to { constexpr bool operator()(const T& x, const T& y) const; }; template<> struct equal_to<void> { template<class T, class U> constexpr auto operator()(T&& t, U&& u) const -> decltype(std::forward<T>(t) == std::forward<U>(u)); using is_transparent = /* 未指定 */; }; }
クラステンプレート std::not_equal_to
namespace std { template<class T = void> struct not_equal_to { constexpr bool operator()(const T& x, const T& y) const; }; template<> struct not_equal_to<void> { template<class T, class U> constexpr auto operator()(T&& t, U&& u) const -> decltype(std::forward<T>(t) != std::forward<U>(u)); using is_transparent = /* 未指定 */; }; }
クラステンプレート std::greater
namespace std { template<class T = void> struct greater { constexpr bool operator()(const T& x, const T& y) const; }; template<> struct greater<void> { template<class T, class U> constexpr auto operator()(T&& t, U&& u) const -> decltype(std::forward<T>(t) > std::forward<U>(u)); using is_transparent = /* 未指定 */; }; }
クラステンプレート std::less
namespace std { template<class T = void> struct less { constexpr bool operator()(const T& x, const T& y) const; }; template<> struct less<void> { template<class T, class U> constexpr auto operator()(T&& t, U&& u) const -> decltype(std::forward<T>(t) < std::forward<U>(u)); using is_transparent = /* 未指定 */; }; }
クラステンプレート std::greater_equal
namespace std { template<class T = void> struct greater_equal { constexpr bool operator()(const T& x, const T& y) const; }; template<> struct greater_equal<void> { template<class T, class U> constexpr auto operator()(T&& t, U&& u) const -> decltype(std::forward<T>(t) >= std::forward<U>(u)); using is_transparent = /* 未指定 */; }; }
クラステンプレート std::less_equal
namespace std { template<class T = void> struct less_equal { constexpr bool operator()(const T& x, const T& y) const; }; template<> struct less_equal<void> { template<class T, class U> constexpr auto operator()(T&& t, U&& u) const -> decltype(std::forward<T>(t) <= std::forward<U>(u)); using is_transparent = /* 未指定 */; }; }
クラス std::compare_three_way
namespace std { struct compare_three_way { template<class T, class U> constexpr auto operator()(T&& t, U&& u) const; using is_transparent = /* 未指定 */; }; }
クラス std::ranges::equal_to
namespace std::ranges { struct equal_to { template<class T, class U> constexpr bool operator()(T&& t, U&& u) const; using is_transparent = /* 未指定 */; }; }
クラス std::ranges::not_equal_to
namespace std::ranges { struct not_equal_to { template<class T, class U> constexpr bool operator()(T&& t, U&& u) const; using is_transparent = /* 未指定 */; }; }
クラス std::ranges::greater
namespace std::ranges { struct greater { template<class T, class U> constexpr bool operator()(T&& t, U&& u) const; using is_transparent = /* 未指定 */; }; }
クラス std::ranges::less
namespace std::ranges { struct less { template<class T, class U> constexpr bool operator()(T&& t, U&& u) const; using is_transparent = /* 未指定 */; }; }
クラス std::ranges::greater_equal
namespace std::ranges { struct greater_equal { template<class T, class U> constexpr bool operator()(T&& t, U&& u) const; using is_transparent = /* 未指定 */; }; }
クラス std::ranges::less_equal
namespace std::ranges { struct less_equal { template<class T, class U> constexpr bool operator()(T&& t, U&& u) const; using is_transparent = /* 未指定 */; }; }
クラステンプレート std::logical_and
namespace std { template<class T = void> struct logical_and { constexpr bool operator()(const T& x, const T& y) const; }; template<> struct logical_and<void> { template<class T, class U> constexpr auto operator()(T&& t, U&& u) const -> decltype(std::forward<T>(t) && std::forward<U>(u)); using is_transparent = /* 未指定 */; }; }
クラステンプレート std::logical_or
namespace std { template<class T = void> struct logical_or { constexpr bool operator()(const T& x, const T& y) const; }; template<> struct logical_or<void> { template<class T, class U> constexpr auto operator()(T&& t, U&& u) const -> decltype(std::forward<T>(t) || std::forward<U>(u)); using is_transparent = /* 未指定 */; }; }
クラステンプレート std::logical_not
namespace std { template<class T = void> struct logical_not { constexpr bool operator()(const T& x) const; }; template<> struct logical_not<void> { template<class T> constexpr auto operator()(T&& t) const -> decltype(!std::forward<T>(t)); using is_transparent = /* 未指定 */; }; }
クラステンプレート std::bit_and
namespace std { template<class T = void> struct bit_and { constexpr T operator()(const T& x, const T& y) const; }; template<> struct bit_and<void> { template<class T, class U> constexpr auto operator()(T&& t, U&& u) const -> decltype(std::forward<T>(t) & std::forward<U>(u)); using is_transparent = /* 未指定 */; }; }
クラステンプレート std::bit_or
namespace std { template<class T = void> struct bit_or { constexpr T operator()(const T& x, const T& y) const; }; template<> struct bit_or<void> { template<class T, class U> constexpr auto operator()(T&& t, U&& u) const -> decltype(std::forward<T>(t) | std::forward<U>(u)); using is_transparent = /* 未指定 */; }; }
クラステンプレート std::bit_xor
namespace std { template<class T = void> struct bit_xor { constexpr T operator()(const T& x, const T& y) const; }; template<> struct bit_xor<void> { template<class T, class U> constexpr auto operator()(T&& t, U&& u) const -> decltype(std::forward<T>(t) ^ std::forward<U>(u)); using is_transparent = /* 未指定 */; }; }
クラステンプレート std::bit_not
namespace std { template<class T = void> struct bit_not { constexpr T operator()(const T& x) const; }; template<> struct bit_not<void> { template<class T> constexpr auto operator()(T&& t) const -> decltype(~std::forward<T>(t)); using is_transparent = /* 未指定 */; }; }
クラステンプレート std::identity
namespace std { struct identity { template<class T> constexpr T&& operator()(T&& t) const noexcept; using is_transparent = /* 未指定 */; }; }
クラステンプレート std::is_bind_expression
namespace std { template<class T> struct is_bind_expression; }
クラステンプレート std::is_placeholder
namespace std { template<class T> struct is_placeholder; }
クラス std::bad_function_call
namespace std { class bad_function_call : public exception { public: // 特殊メンバ関数の仕様については[exception]を参照 const char* what() const noexcept override; }; }
クラステンプレート std::function
namespace std { template<class> class function; // 未定義 template<class R, class... ArgTypes> class function<R(ArgTypes...)> { public: using result_type = R; // 構築/コピー/破棄 function() noexcept; function(nullptr_t) noexcept; function(const function&); function(function&&) noexcept; template<class F> function(F); function& operator=(const function&); function& operator=(function&&); function& operator=(nullptr_t) noexcept; template<class F> function& operator=(F&&); template<class F> function& operator=(reference_wrapper<F>) noexcept; ~function(); // 関数修飾子 void swap(function&) noexcept; // 関数容量 explicit operator bool() const noexcept; // 関数呼び出し R operator()(ArgTypes...) const; // 関数ターゲットアクセス const type_info& target_type() const noexcept; template<class T> T* target() noexcept; template<class T> const T* target() const noexcept; }; template<class R, class... ArgTypes> function(R(*)(ArgTypes...)) -> function<R(ArgTypes...)>; template<class F> function(F) -> function</* 詳細は説明を参照 */>; // ヌルポインタ比較関数 template<class R, class... ArgTypes> bool operator==(const function<R(ArgTypes...)>&, nullptr_t) noexcept; // 特殊化アルゴリズム template<class R, class... ArgTypes> void swap(function<R(ArgTypes...)>&, function<R(ArgTypes...)>&) noexcept; }
クラステンプレート std::move_only_function
namespace std { template<class... S> class move_only_function; // 未定義 template<class R, class... ArgTypes> class move_only_function<R(ArgTypes...) /*cv-ref*/ noexcept(/*noex*/)> { public: using result_type = R; // 構築/ムーブ/破棄 move_only_function() noexcept; move_only_function(nullptr_t) noexcept; move_only_function(move_only_function&&) noexcept; template<class F> move_only_function(F&&); template<class T, class... Args> explicit move_only_function(in_place_type_t<T>, Args&&...); template<class T, class U, class... Args> explicit move_only_function(in_place_type_t<T>, initializer_list<U>, Args&&...); move_only_function& operator=(move_only_function&&); move_only_function& operator=(nullptr_t) noexcept; template<class F> move_only_function& operator=(F&&); ~move_only_function(); // 呼び出し explicit operator bool() const noexcept; R operator()(ArgTypes...) /*cv-ref*/ noexcept(/*noex*/); // ユーティリティ void swap(move_only_function&) noexcept; friend void swap(move_only_function&, move_only_function&) noexcept; friend bool operator==(const move_only_function&, nullptr_t) noexcept; private: // 説明専用 template<class VT> static constexpr bool /*is-callable-from*/ = /* 説明を参照 */; }; }
クラステンプレート std::copyable_function
namespace std { template<class... S> class copyable_function; // 未定義 template<class R, class... ArgTypes> class copyable_function<R(ArgTypes...) /*cv-ref*/ noexcept(/*noex*/)> { public: using result_type = R; // 構築/移動/破棄 copyable_function() noexcept; copyable_function(nullptr_t) noexcept; copyable_function(const copyable_function&); copyable_function(copyable_function&&) noexcept; template<class F> copyable_function(F&&); template<class T, class... Args> explicit copyable_function(in_place_type_t<T>, Args&&...); template<class T, class U, class... Args> explicit copyable_function(in_place_type_t<T>, initializer_list<U>, Args&&...); copyable_function& operator=(const copyable_function&); copyable_function& operator=(copyable_function&&); copyable_function& operator=(nullptr_t) noexcept; template<class F> copyable_function& operator=(F&&); ~copyable_function(); // 呼び出し explicit operator bool() const noexcept; R operator()(ArgTypes...) /*cv-ref*/ noexcept(/*noex*/); // ユーティリティ void swap(copyable_function&) noexcept; friend void swap(copyable_function&, copyable_function&) noexcept; friend bool operator==(const copyable_function&, nullptr_t) noexcept; private: // 説明専用 template<class VT> static constexpr bool /*is-callable-from*/ = /* 説明を参照 */; }; }
クラステンプレート std::function_ref
namespace std { template<class... S> class function_ref; // 未定義 template<class R, class... ArgTypes> class function_ref<R(ArgTypes...) /*cv*/ noexcept(/*noex*/)> { public: // コンストラクタと代入演算子 template<class F> function_ref(F*) noexcept; template<class F> constexpr function_ref(F&&) noexcept; template<auto f> constexpr function_ref(nontype_t<f>) noexcept; template<auto f, class U> constexpr function_ref(nontype_t<f>, U&&) noexcept; template<auto f, class T> constexpr function_ref(nontype_t<f>, /*cv*/ T*) noexcept; constexpr function_ref(const function_ref&) noexcept = default; constexpr function_ref& operator=(const function_ref&) noexcept = default; template<class T> function_ref& operator=(T) = delete; // 呼び出し R operator()(ArgTypes...) /*cv*/ noexcept(/*noex*/); private: // 説明専用 template<class... T> static constexpr bool /*is-invocable-using*/ = /* 説明を参照 */; R (*thunk-ptr)(BoundEntityType, ArgTypes&&...) noexcept(/*noex*/); // 説明専用 BoundEntityType bound-entity; // 説明専用 }; // 推論ガイド template<class F> function_ref(F*) -> function_ref<F>; template<auto f> function_ref(nontype_t<f>) -> function_ref</* 説明を参照 */>; template<auto f, class T> function_ref(nontype_t<f>, T&&) -> function_ref</* 説明を参照 */>; }
クラステンプレート std::default_searcher
namespace std { template<class ForwardIter1, class BinaryPredicate = equal_to<>> class default_searcher { public: constexpr default_searcher(ForwardIter1 pat_first, ForwardIter1 pat_last, BinaryPredicate pred = BinaryPredicate()); template<class ForwardIter2> constexpr pair<ForwardIter2, ForwardIter2> operator()(ForwardIter2 first, ForwardIter2 last) const; private: ForwardIter1 pat_first_; // 説明専用 ForwardIter1 pat_last_; // 説明専用 BinaryPredicate pred_; // 説明専用 }; }
クラステンプレート std::boyer_moore_searcher
namespace std { template<class RandomAccessIter1, class Hash = hash<typename iterator_traits<RandomAccessIter1>::value_type>, class BinaryPredicate = equal_to<>> class boyer_moore_searcher { public: boyer_moore_searcher(RandomAccessIter1 pat_first, RandomAccessIter1 pat_last, Hash hf = Hash(), BinaryPredicate pred = BinaryPredicate()); template<class RandomAccessIter2> pair<RandomAccessIter2, RandomAccessIter2> operator()(RandomAccessIter2 first, RandomAccessIter2 last) const; private: RandomAccessIter1 pat_first_; // 説明専用 RandomAccessIter1 pat_last_; // 説明専用 Hash hash_; // 説明専用 BinaryPredicate pred_; // 説明専用 }; }
クラステンプレート std::boyer_moore_horspool_searcher
namespace std { template<class RandomAccessIter1, class Hash = hash<typename iterator_traits<RandomAccessIter1>::value_type>, class BinaryPredicate = equal_to<>> class boyer_moore_horspool_searcher { public: boyer_moore_horspool_searcher(RandomAccessIter1 pat_first, RandomAccessIter1 pat_last, Hash hf = Hash(), BinaryPredicate pred = BinaryPredicate()); template<class RandomAccessIter2> pair<RandomAccessIter2, RandomAccessIter2> operator()(RandomAccessIter2 first, RandomAccessIter2 last) const; private: RandomAccessIter1 pat_first_; // 説明専用 RandomAccessIter1 pat_last_; // 説明専用 Hash hash_; // 説明専用 BinaryPredicate pred_; // 説明専用 }; }
関連項目
| std::hash ライブラリ型に対する特殊化 |