Namespaces
Variants
Actions

Standard library header <functional>

From cppreference.com
< cpp‎ | header
 
 
Standard library headers
<any> (C++17)
<bit> (C++20)
<charconv> (C++17)
<expected> (C++23)
<format> (C++20)
<functional>
<optional> (C++17)
<stdbit.h> (C++26)
<tuple> (C++11)
<typeindex> (C++11)
<variant> (C++17)
<array> (C++11)
<flat_map> (C++23)
<flat_set> (C++23)
<hive> (C++26)
<inplace_vector> (C++26)   
<mdspan> (C++23)
<span> (C++20)
<generator> (C++23)
<ranges> (C++20)
 

This header is part of the function objects library and provides the standard hash function.

Contents

Namespaces

placeholders (C++11) Provides placeholders for the unbound arguments in a std::bind expression

Classes

Wrappers
(C++11)
copyable wrapper of any copy constructible callable object
(class template) [edit]
move-only wrapper of any callable object that supports qualifiers in a given call signature
(class template) [edit]
copyable wrapper of any copy constructible callable object that supports qualifiers in a given call signature
(class template) [edit]
non-owning wrapper of any callable object
(class template) [edit]
(C++11)
creates a function object out of a pointer to a member
(function template) [edit]
CopyConstructible and CopyAssignable reference wrapper
(class template) [edit]
get the reference type wrapped in std::reference_wrapper
(class template) [edit]
Helper classes
the exception thrown when invoking an empty std::function
(class) [edit]
indicates that an object is std::bind expression or can be used as one
(class template) [edit]
indicates that an object is a standard placeholder or can be used as one
(class template) [edit]
Arithmetic operations
function object implementing x + y
(class template) [edit]
function object implementing x - y
(class template) [edit]
function object implementing x * y
(class template) [edit]
function object implementing x / y
(class template) [edit]
function object implementing x % y
(class template) [edit]
function object implementing -x
(class template) [edit]
Comparisons
function object implementing x == y
(class template) [edit]
function object implementing x != y
(class template) [edit]
function object implementing x > y
(class template) [edit]
function object implementing x < y
(class template) [edit]
function object implementing x >= y
(class template) [edit]
function object implementing x <= y
(class template) [edit]
Concept-constrained comparisons
constrained function object implementing x == y
(class) [edit]
constrained function object implementing x != y
(class) [edit]
constrained function object implementing x > y
(class) [edit]
constrained function object implementing x < y
(class) [edit]
constrained function object implementing x >= y
(class) [edit]
constrained function object implementing x <= y
(class) [edit]
constrained function object implementing x <=> y
(class) [edit]
Logical operations
function object implementing x && y
(class template) [edit]
function object implementing x || y
(class template) [edit]
function object implementing !x
(class template) [edit]
Bitwise operations
function object implementing x & y
(class template) [edit]
function object implementing x | y
(class template) [edit]
function object implementing x ^ y
(class template) [edit]
(C++14)
function object implementing ~x
(class template) [edit]
Negators
(C++17)
creates a function object that returns the complement of the result of the function object it holds
(function template) [edit]
Identities
(C++20)
function object that returns its argument unchanged
(class) [edit]
Searchers
standard C++ library search algorithm implementation
(class template) [edit]
Boyer-Moore search algorithm implementation
(class template) [edit]
Boyer-Moore-Horspool search algorithm implementation
(class template) [edit]
Hashing
(C++11)
hash function object
(class template) [edit]
std::hash specializations for fundamental, enumeration, and pointer types
(class template specialization)

Constants

Defined in namespace std::placeholders
placeholders for the unbound arguments in a std::bind expression
(constant) [edit]

Functions

(C++20)(C++23)
bind a variable number of arguments, in order, to a function object
(function template) [edit]
(C++11)
binds one or more arguments to a function object
(function template) [edit]
(C++11)(C++11)
creates a std::reference_wrapper with a type deduced from its argument
(function template) [edit]
(C++17)(C++23)
invokes any Callable object with given arguments and possibility to specify return type(since C++23)
(function template) [edit]

[edit] Deprecated in C++11 and removed in C++17

Base
(deprecated in C++11)(removed in C++17)
adaptor-compatible unary function base class
(class template) [edit]
(deprecated in C++11)(removed in C++17)
adaptor-compatible binary function base class
(class template) [edit]
Binders
(deprecated in C++11)(removed in C++17)
function object holding a binary function and one of its arguments
(class template) [edit]
(deprecated in C++11)(removed in C++17)
binds one argument to a binary function
(function template) [edit]
Function adaptors
(deprecated in C++11)(removed in C++17)
adaptor-compatible wrapper for a pointer to unary function
(class template) [edit]
(deprecated in C++11)(removed in C++17)
adaptor-compatible wrapper for a pointer to binary function
(class template) [edit]
(deprecated in C++11)(removed in C++17)
creates an adaptor-compatible function object wrapper from a pointer to function
(function template) [edit]
(deprecated in C++11)(removed in C++17)
wrapper for a pointer to nullary or unary member function, callable with a pointer to object
(class template) [edit]
(deprecated in C++11)(removed in C++17)
creates a wrapper from a pointer to member function, callable with a pointer to object
(function template) [edit]
wrapper for a pointer to nullary or unary member function, callable with a reference to object
(class template) [edit]
(deprecated in C++11)(removed in C++17)
creates a wrapper from a pointer to member function, callable with a reference to object
(function template) [edit]

[edit] Deprecated in C++17 and removed in C++20

Negators
(deprecated in C++17)(removed in C++20)
wrapper function object returning the complement of the unary predicate it holds
(class template) [edit]
(deprecated in C++17)(removed in C++20)
wrapper function object returning the complement of the binary predicate it holds
(class template) [edit]
(deprecated in C++17)(removed in C++20)
constructs custom std::unary_negate object
(function template) [edit]
(deprecated in C++17)(removed in C++20)
constructs custom std::binary_negate object
(function template) [edit]

[edit] Synopsis

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 related specializations
 template<class R, class T, template<class> class RQual, template<class> class TQual>
 requires /* see below */
 struct basic_common_reference<R, T, RQual, TQual>;
 
 template<class T, class R, template<class> class TQual, template<class> class RQual>
 requires /* see below */
 struct basic_common_reference<T, R, TQual, RQual>;
 
 // arithmetic operations
 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>;
 
 // comparisons
 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>;
 
 // logical operations
 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>;
 
 // bitwise operations
 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;
 
 // function template not_fn
 template<class F> constexpr /* unspecified */ not_fn(F&& f);
 
 // function templates bind_front and bind_back
 template<class F, class... Args> constexpr /* unspecified */ bind_front(F&&, Args&&...);
 template<class F, class... Args> constexpr /* unspecified */ 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 /* unspecified */ bind(F&&, BoundArgs&&...);
 template<class R, class F, class... BoundArgs>
 constexpr /* unspecified */ bind(F&&, BoundArgs&&...);
 
 namespace placeholders {
 // M is the implementation-defined number of placeholders
 /* see description */ _1;
 /* see description */ _2;
 .
 .
 .
 /* see description */ _M;
 }
 
 // member function adaptors
 template<class R, class T>
 constexpr /* unspecified */ mem_fn(R T::*) noexcept;
 
 // polymorphic function wrappers
 class bad_function_call;
 
 template<class> class function; // not defined
 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 wrapper
 template<class...> class move_only_function; // not defined
 
 template<class R, class... ArgTypes>
 class move_only_function<R(ArgTypes...) /*cv ref*/ noexcept(/*noex*/)>;
 
 // copyable wrapper
 template<class...> class copyable_function; // not defined
 
 template<class R, class... ArgTypes>
 class copyable_function<R(ArgTypes...) /*cv ref*/ noexcept(/*noex*/)>;
 
 // non-owning wrapper
 template<class...> class function_ref; // not defined
 
 template<class R, class... ArgTypes>
 class function_ref<R(ArgTypes...) /*cv*/ noexcept(/*noex*/)>;
 
 // searchers
 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;
 
 // hash function primary template
 template<class T>
 struct hash;
 
 // concept-constrained comparisons
 struct compare_three_way;
 namespace ranges {
 struct equal_to;
 struct not_equal_to;
 struct greater;
 struct less;
 struct greater_equal;
 struct less_equal;
 }
 
 // exposition only
 template<class Fn, class... Args>
 concept /*callable*/ =
 requires (Fn&& fn, Args&&... args) {
 std::forward <Fn>(fn)(std::forward <Args>(args)...);
 };
 
 // exposition only
 template<class Fn, class... Args>
 concept /*nothrow-callable*/ =
 /*callable*/<Fn, Args...> &&
 requires (Fn&& fn, Args&&... args) {
 { std::forward <Fn>(fn)(std::forward <Args>(args)...) } noexcept;
 };
 
 // exposition only
 template<class Fn, class... Args>
 using /*call-result-t*/ = decltype(std::declval <Fn>()(std::declval <Args>()...));
 
 // exposition only
 template<const auto& T>
 using /*decayed-typeof*/ = decltype(auto(T));
}

[edit] Class template std::reference_wrapper

namespace std {
 template<class T> class reference_wrapper {
 public:
 // types
 using type = T;
 
 // construct/copy/destroy
 template<class U>
 constexpr reference_wrapper(U&&) noexcept(/* see below */);
 constexpr reference_wrapper(const reference_wrapper& x) noexcept;
 
 // assignment
 constexpr reference_wrapper& operator=(const reference_wrapper& x) noexcept;
 
 // access
 constexpr operator T& () const noexcept;
 constexpr T& get() const noexcept;
 
 // invocation
 template<class... ArgTypes>
 constexpr invoke_result_t<T&, ArgTypes...> operator()(ArgTypes&&...) const
 noexcept(is_nothrow_invocable_v<T&, ArgTypes...>);
 
 // comparison
 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>);
 };
 // deduction guides
 template<class T>
 reference_wrapper(T&) -> reference_wrapper<T>;
}

[edit] Class template std::unwrap_reference

namespace std {
 template<class T>
 struct unwrap_reference;
}

[edit] Class template std::unwrap_ref_decay

namespace std {
 template<class T>
 struct unwrap_ref_decay;
}

[edit] Class template 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 = /* unspecified */;
 };
}

[edit] Class template 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 = /* unspecified */;
 };
}

[edit] Class template 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 = /* unspecified */;
 };
}

[edit] Class template 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 = /* unspecified */;
 };
}

[edit] Class template 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 = /* unspecified */;
 };
}

[edit] Class template 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 = /* unspecified */;
 };
}

[edit] Class template 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 = /* unspecified */;
 };
}

[edit] Class template 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 = /* unspecified */;
 };
}

[edit] Class template 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 = /* unspecified */;
 };
}

[edit] Class template 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 = /* unspecified */;
 };
}

[edit] Class template 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 = /* unspecified */;
 };
}

[edit] Class template 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 = /* unspecified */;
 };
}

[edit] Class 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 = /* unspecified */;
 };
}

[edit] Class 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 = /* unspecified */;
 };
}

[edit] Class 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 = /* unspecified */;
 };
}

[edit] Class std::ranges::greater

namespace std::ranges {
 struct greater {
 template<class T, class U>
 constexpr bool operator()(T&& t, U&& u) const;
 
 using is_transparent = /* unspecified */;
 };
}

[edit] Class std::ranges::less

namespace std::ranges {
 struct less {
 template<class T, class U>
 constexpr bool operator()(T&& t, U&& u) const;
 
 using is_transparent = /* unspecified */;
 };
}

[edit] Class 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 = /* unspecified */;
 };
}

[edit] Class 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 = /* unspecified */;
 };
}

[edit] Class template 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 = /* unspecified */;
 };
}

[edit] Class template 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 = /* unspecified */;
 };
}

[edit] Class template 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 = /* unspecified */;
 };
}

[edit] Class template 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 = /* unspecified */;
 };
}

[edit] Class template 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 = /* unspecified */;
 };
}

[edit] Class template 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 = /* unspecified */;
 };
}

[edit] Class template 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 = /* unspecified */;
 };
}

[edit] Class template std::identity

namespace std {
 struct identity {
 template<class T>
 constexpr T&& operator()(T&& t) const noexcept;
 
 using is_transparent = /* unspecified */;
 };
}

[edit] Class template std::is_bind_expression

namespace std {
 template<class T> struct is_bind_expression;
}

[edit] Class template std::is_placeholder

namespace std {
 template<class T> struct is_placeholder;
}

[edit] Class std::bad_function_call

namespace std {
 class bad_function_call : public exception {
 public:
 // see [exception] for the specification of the special member functions
 const char* what() const noexcept override;
 };
}

[edit] Class template std::function

namespace std {
 template<class> class function; // not defined
 
 template<class R, class... ArgTypes>
 class function<R(ArgTypes...)> {
 public:
 using result_type = R;
 
 // construct/copy/destroy
 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();
 
 // function modifiers
 void swap(function&) noexcept;
 
 // function capacity
 explicit operator bool() const noexcept;
 
 // function invocation
 R operator()(ArgTypes...) const;
 
 // function target access
 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</* see description */>;
 
 // null pointer comparison functions
 template<class R, class... ArgTypes>
 bool operator==(const function<R(ArgTypes...)>&, nullptr_t) noexcept;
 
 // specialized algorithms
 template<class R, class... ArgTypes>
 void swap(function<R(ArgTypes...)>&, function<R(ArgTypes...)>&) noexcept;
}

[edit] Class template std::move_only_function

namespace std {
 template<class... S> class move_only_function; // not defined
 
 template<class R, class... ArgTypes>
 class move_only_function<R(ArgTypes...) /*cv-ref*/ noexcept(/*noex*/)> {
 public:
 using result_type = R;
 
 // construct/move/destroy
 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();
 
 // invocation
 explicit operator bool() const noexcept;
 
 R operator()(ArgTypes...) /*cv-ref*/ noexcept(/*noex*/);
 
 // utility
 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:
 // exposition-only
 template<class VT>
 static constexpr bool /*is-callable-from*/ = /* see description */; 
 };
}

[edit] Class template std::copyable_function

namespace std {
 template<class... S> class copyable_function; // not defined
 
 template<class R, class... ArgTypes>
 class copyable_function<R(ArgTypes...) /*cv-ref*/ noexcept(/*noex*/)> {
 public:
 using result_type = R;
 
 // construct/move/destroy
 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();
 
 // invocation
 explicit operator bool() const noexcept;
 
 R operator()(ArgTypes...) /*cv-ref*/ noexcept(/*noex*/);
 
 // utility
 void swap(copyable_function&) noexcept;
 
 friend void swap(copyable_function&, copyable_function&) noexcept;
 
 friend bool operator==(const copyable_function&, nullptr_t) noexcept;
 
 private:
 // exposition-only
 template<class VT>
 static constexpr bool /*is-callable-from*/ = /* see description */; 
 };
}

[edit] Class template std::function_ref

namespace std {
 template<class... S> class function_ref; // not defined
 
 template<class R, class... ArgTypes>
 class function_ref<R(ArgTypes...) /*cv*/ noexcept(/*noex*/)> {
 public:
 // constructors and assignment operators
 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;
 
 // invocation
 R operator()(ArgTypes...) /*cv*/ noexcept(/*noex*/);
 
 private:
 // exposition-only
 template<class... T>
 static constexpr bool /*is-invocable-using*/ = /* see description */;
 
 R (*thunk-ptr)(BoundEntityType, ArgTypes&&...) noexcept(/*noex*/); // exposition-only
 BoundEntityType bound-entity; // exposition-only
 };
 // deduction guides
 template<class F>
 function_ref(F*) -> function_ref<F>;
 template<auto f>
 function_ref(nontype_t<f>) -> function_ref</* see description */>;
 template<auto f, class T>
 function_ref(nontype_t<f>, T&&) -> function_ref</* see description */>;
}

[edit] Class template 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_; // exposition only
 ForwardIter1 pat_last_; // exposition only
 BinaryPredicate pred_; // exposition only
 };
}

[edit] Class template 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_; // exposition only
 RandomAccessIter1 pat_last_; // exposition only
 Hash hash_; // exposition only
 BinaryPredicate pred_; // exposition only
 };
}

[edit] Class template 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_; // exposition only
 RandomAccessIter1 pat_last_; // exposition only
 Hash hash_; // exposition only
 BinaryPredicate pred_; // exposition only
 };
}

[edit] See also

Retrieved from "https://en.cppreference.com/mwiki/index.php?title=cpp/header/functional&oldid=173900"

AltStyle によって変換されたページ (->オリジナル) /