Namespaces
Variants

Standard library header <functional>

From cppreference.net
Standard library headers

Cet en-tête fait partie de la bibliothèque de function objects et fournit la fonction de hachage standard.

Table des matières

Espaces de noms

placeholders (C++11) Fournit des espaces réservés pour les arguments non liés dans une expression std::bind

Classes

Enveloppeurs
(C++11)
enveloppe copiable de tout objet appelable copiable
(modèle de classe)
enveloppe à déplacement unique de tout objet appelable qui prend en charge les qualificateurs dans une signature d'appel donnée
(modèle de classe)
enveloppe copiable de tout objet appelable constructible par copie qui prend en charge les qualificateurs dans une signature d'appel donnée
(modèle de classe)
enveloppe non propriétaire de tout objet appelable
(modèle de classe)
(C++11)
crée un objet fonction à partir d'un pointeur vers un membre
(modèle de fonction)
CopyConstructible et CopyAssignable wrapper de référence
(modèle de classe)
obtenir le type de référence encapsulé dans std::reference_wrapper
(modèle de classe)
Classes auxiliaires
l'exception levée lors de l'appel d'un std::function vide
(classe)
indique qu'un objet est une expression std::bind ou peut être utilisé comme telle
(modèle de classe)
indique qu'un objet est un espace réservé standard ou peut être utilisé comme tel
(modèle de classe)
Opérations arithmétiques
objet fonction implémentant x + y
(modèle de classe)
objet fonction implémentant x - y
(modèle de classe)
objet fonction implémentant x * y
(modèle de classe)
objet fonction implémentant x / y
(modèle de classe)
objet fonction implémentant x % y
(modèle de classe)
objet fonction implémentant - x
(modèle de classe)
Comparaisons
objet fonction implémentant x == y
(modèle de classe)
objet fonction implémentant x ! = y
(modèle de classe)
objet fonction implémentant x > y
(modèle de classe)
objet fonction implémentant x < y
(modèle de classe)
objet fonction implémentant x >= y
(modèle de classe)
objet fonction implémentant x <= y
(modèle de classe)
Comparaisons contraintes par concept
objet fonction contraint implémentant x == y
(classe)
objet fonction contraint implémentant x ! = y
(classe)
objet fonction contraint implémentant x > y
(classe)
objet fonction contraint implémentant x < y
(classe)
objet fonction contraint implémentant x >= y
(classe)
objet fonction contraint implémentant x <= y
(classe)
objet fonction contraint implémentant x <=> y
(classe)
Opérations logiques
objet fonction implémentant x && y
(modèle de classe)
objet fonction implémentant x || y
(modèle de classe)
objet fonction implémentant ! x
(modèle de classe)
Opérations bit à bit
objet fonction implémentant x & y
(modèle de classe)
objet fonction implémentant x | y
(modèle de classe)
objet fonction implémentant x ^ y
(modèle de classe)
(C++14)
objet fonction implémentant ~x
(modèle de classe)
Négateurs
(C++17)
crée un objet fonction qui retourne le complément du résultat de l'objet fonction qu'il contient
(modèle de fonction)
Identités
(C++20)
objet fonction qui retourne son argument inchangé
(classe)
Chercheurs
implémentation de l'algorithme de recherche de la bibliothèque standard C++
(modèle de classe)
Implémentation de l'algorithme de recherche Boyer-Moore
(modèle de classe)
Implémentation de l'algorithme de recherche Boyer-Moore-Horspool
(modèle de classe)
Hachage
(C++11)
objet fonction de hachage
(modèle de classe)
std::hash spécialisations pour les types fondamentaux, énumérations et pointeurs
(spécialisation de modèle de classe)

Constantes

Défini dans l'espace de noms std::placeholders
espaces réservés pour les arguments non liés dans une expression std::bind
(constante)

Fonctions

(C++20) (C++23)
lie un nombre variable d'arguments, dans l'ordre, à un objet fonction
(modèle de fonction)
(C++11)
lie un ou plusieurs arguments à un objet fonction
(modèle de fonction)
(C++11) (C++11)
crée un std::reference_wrapper avec un type déduit de son argument
(modèle de fonction)
(C++17) (C++23)
invoque tout Callable objet avec les arguments donnés et possibilité de spécifier le type de retour (depuis C++23)
(modèle de fonction)

Déprécié en C++11 et supprimé en C++17

Base
(obsolète en C++11) (supprimé en C++17)
classe de base de fonction unaire compatible avec les adaptateurs
(modèle de classe)
(obsolète en C++11) (supprimé en C++17)
classe de base de fonction binaire compatible avec les adaptateurs
(modèle de classe)
Binders
(obsolète en C++11) (supprimé en C++17)
objet fonction contenant une fonction binaire et l'un de ses arguments
(modèle de classe)
(obsolète en C++11) (supprimé en C++17)
lie un argument à une fonction binaire
(modèle de fonction)
Adaptateurs de fonctions
(obsolète en C++11) (supprimé en C++17)
wrapper compatible avec les adaptateurs pour un pointeur vers une fonction unaire
(modèle de classe)
(obsolète en C++11) (supprimé en C++17)
wrapper compatible avec les adaptateurs pour un pointeur vers une fonction binaire
(modèle de classe)
(obsolète en C++11) (supprimé en C++17)
crée un wrapper d'objet fonction compatible avec les adaptateurs à partir d'un pointeur vers une fonction
(modèle de fonction)
(obsolète en C++11) (supprimé en C++17)
wrapper pour un pointeur vers une fonction membre nullaire ou unaire, appelable avec un pointeur vers un objet
(modèle de classe)
(obsolète en C++11) (supprimé en C++17)
crée un wrapper à partir d'un pointeur vers une fonction membre, appelable avec un pointeur vers un objet
(modèle de fonction)
wrapper pour un pointeur vers une fonction membre nullaire ou unaire, appelable avec une référence vers un objet
(modèle de classe)
(obsolète en C++11) (supprimé en C++17)
crée un wrapper à partir d'un pointeur vers une fonction membre, appelable avec une référence vers un objet
(modèle de fonction)

Obsolète en C++17 et supprimé en C++20

Négateurs
(obsolète en C++17) (supprimé en C++20)
objet fonction wrapper renvoyant le complément du prédicat unaire qu'il contient
(modèle de classe)
(obsolète en C++17) (supprimé en C++20)
objet fonction wrapper renvoyant le complément du prédicat binaire qu'il contient
(modèle de classe)
(obsolète en C++17) (supprimé en C++20)
construit un objet std::unary_negate personnalisé
(modèle de fonction)
(obsolète en C++17) (supprimé en C++20)
construit un objet std::binary_negate personnalisé
(modèle de fonction)

Synopsis

namespace std {
  // invoquer
  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;
  // spécialisations liées à common_reference
  template<class R, class T, template<class> class RQual, template<class> class TQual>
    requires /* voir ci-dessous */
  struct basic_common_reference<R, T, RQual, TQual>;
  template<class T, class R, template<class> class TQual, template<class> class RQual>
    requires /* voir ci-dessous */
  struct basic_common_reference<T, R, TQual, RQual>;
  // opérations arithmétiques
  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>;
  // comparaisons
  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>;
  // opérations logiques
  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>;
  // opérations bit à bit
  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>;
  // identité
  struct identity;
  // modèle de fonction not_fn
  template<class F> constexpr /* non spécifié */ not_fn(F&& f);
  // modèles de fonction bind_front et bind_back
  template<class F, class... Args> constexpr /* non spécifié */ bind_front(F&&, Args&&...);
  template<class F, class... Args> constexpr /* non spécifié */ bind_back(F&&, Args&&...);
  // lier
  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 /* non spécifié */ bind(F&&, BoundArgs&&...);
  template<class R, class F, class... BoundArgs>
    constexpr /* non spécifié */ bind(F&&, BoundArgs&&...);
  namespace placeholders {
    // M est le nombre défini par l'implémentation de placeholders
    /* voir description */ _1;
    /* voir description */ _2;
               .
               .
               .
    /* voir description */ _M;
  }
  // adaptateurs de fonctions membres
  template<class R, class T>
    constexpr /* non spécifié */ mem_fn(R T::*) noexcept;
  // enveloppes de fonctions polymorphes
  class bad_function_call;
  template<class> class function; // non défini
  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;
  // wrapper déplaçable uniquement
  template<class...> class move_only_function; // non défini
  template<class R, class... ArgTypes>
    class move_only_function<R(ArgTypes...) /*référence cv*/ noexcept(/*noex*/)>;
  // wrapper copiable
  template<class...> class copyable_function; // non défini
  template<class R, class... ArgTypes>
    class copyable_function<R(ArgTypes...) /*cv ref*/ noexcept(/*noex*/)>;
  // wrapper non propriétaire
  template<class...> class function_ref; // non défini
  template<class R, class... ArgTypes>
    class function_ref<R(ArgTypes...) /*cv*/ noexcept(/*noex*/)>;
  // chercheurs
  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;
  // fonction de hachage template primaire
  template<class T>
    struct hash;
  // comparaisons contraintes par des concepts
  struct compare_three_way;
  namespace ranges {
    struct equal_to;
    struct not_equal_to;
    struct greater;
    struct less;
    struct greater_equal;
    struct less_equal;
  }
  // exposition uniquement
  template<class Fn, class... Args>
    concept /*appelable*/ =
      requires (Fn&& fn, Args&&... args) {
        std::forward<Fn>(fn)(std::forward<Args>(args)...);
      };
  // exposition uniquement
  template<class Fn, class... Args>
    concept /*nothrow-callable*/ =
      /*appelable*/<Fn, Args...> &&
      requires (Fn&& fn, Args&&... args) {
        { std::forward<Fn>(fn)(std::forward<Args>(args)...) } noexcept;
      };
  // exposition uniquement
  template<class Fn, class... Args>
    using /*call-result-t*/ = decltype(std::declval<Fn>()(std::declval<Args>()...));
  // exposition uniquement
  template<const auto& T>
    using /*decayed-typeof*/ = decltype(auto(T));
}

Modèle de classe 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(/* voir ci-dessous */);
    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>);
  };
  // guides de déduction
  template<class T>
    reference_wrapper(T&) -> reference_wrapper<T>;
}

Modèle de classe std::unwrap_reference

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

Modèle de classe std::unwrap_ref_decay

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

Modèle de classe 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 = /* non spécifié */;
  };
}

Modèle de classe 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 = /* non spécifié */;
  };
}

Modèle de classe 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 = /* non spécifié */;
  };
}

Modèle de classe 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 = /* non spécifié */;
  };
}

Modèle de classe 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 = /* non spécifié */;
  };
}

Modèle de classe 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 = /* non spécifié */;
  };
}

Modèle de classe 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 = /* non spécifié */;
  };
}

Modèle de classe 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 = /* non spécifié */;
  };
}

Modèle de classe 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 = /* non spécifié */;
  };
}

Modèle de classe 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 = /* non spécifié */;
  };
}

Modèle de classe 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 = /* non spécifié */;
  };
}

Modèle de classe 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 = /* non spécifié */;
  };
}

Classe 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 = /* non spécifié */;
  };
}

Classe 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 = /* non spécifié */;
  };
}

Classe 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 = /* non spécifié */;
  };
}

Classe std::ranges::greater

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

Classe std::ranges::less

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

Classe 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 = /* non spécifié */;
  };
}

Classe 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 = /* non spécifié */;
  };
}

Modèle de classe 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 = /* non spécifié */;
  };
}

Modèle de classe 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 = /* non spécifié */;
  };
}

Modèle de classe 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 = /* non spécifié */;
  };
}

Modèle de classe 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 = /* non spécifié */;
  };
}

Modèle de classe 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 = /* non spécifié */;
  };
}

Modèle de classe 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 = /* non spécifié */;
  };
}

Modèle de classe 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 = /* non spécifié */;
  };
}

Modèle de classe std::identity

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

Modèle de classe std::is_bind_expression

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

Modèle de classe std::is_placeholder

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

Classe std::bad_function_call

namespace std {
  class bad_function_call : public exception {
  public:
    // voir [exception] pour la spécification des fonctions membres spéciales
    const char* what() const noexcept override;
  };
}

Modèle de classe std::function

namespace std {
  template<class> class function; // non défini
  template<class R, class... ArgTypes>
  class function<R(ArgTypes...)> {
  public:
    using result_type = R;
    // construction/copie/destruction
    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();
    // modificateurs de fonction
    void swap(function&) noexcept;
    // capacité de la fonction
    explicit operator bool() const noexcept;
    // invocation de fonction
    R operator()(ArgTypes...) const;
    // accès à la cible de la fonction
    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</* voir description */>;
  // fonctions de comparaison avec pointeur nul
  template<class R, class... ArgTypes>
    bool operator==(const function<R(ArgTypes...)>&, nullptr_t) noexcept;
  // algorithmes spécialisés
  template<class R, class... ArgTypes>
    void swap(function<R(ArgTypes...)>&, function<R(ArgTypes...)>&) noexcept;
}

Modèle de classe std::move_only_function

namespace std {
  template<class... S> class move_only_function; // non défini
  template<class R, class... ArgTypes>
  class move_only_function<R(ArgTypes...) /*cv-ref*/ noexcept(/*noex*/)> {
  public:
    using result_type = R;
    // construction/déplacement/destruction
    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*/);
    // utilitaires
    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 uniquement
    template<class VT>
      static constexpr bool /*is-callable-from*/ = /* voir description */; 
  };
}

Modèle de classe std::copyable_function

namespace std {
  template<class... S> class copyable_function; // non défini
  template<class R, class... ArgTypes>
  class copyable_function<R(ArgTypes...) /*cv-ref*/ noexcept(/*noex*/)> {
  public:
    using result_type = R;
    // construction/déplacement/destruction
    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*/);
    // utilitaire
    void swap(copyable_function&) noexcept;
    friend void swap(copyable_function&, copyable_function&) noexcept;
    friend bool operator==(const copyable_function&, nullptr_t) noexcept;
  private:
    // exposition uniquement
    template<class VT>
      static constexpr bool /*is-callable-from*/ = /* voir description */; 
  };
}

Modèle de classe std::function_ref

namespace std {
  template<class... S> class function_ref; // non défini
  template<class R, class... ArgTypes>
  class function_ref<R(ArgTypes...) /*cv*/ noexcept(/*noex*/)> {
  public:
    // constructeurs et opérateurs d'affectation
    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 uniquement
    template<class... T>
      static constexpr bool /*is-invocable-using*/ = /* voir description */;
    R (*thunk-ptr)(BoundEntityType, ArgTypes&&...) noexcept(/*noex*/); // exposition uniquement
    BoundEntityType bound-entity; // exposition uniquement
  };
  // guides de déduction
  template<class F>
    function_ref(F*) -> function_ref<F>;
  template<auto f>
    function_ref(nontype_t<f>) -> function_ref</* voir description */>;
  template<auto f, class T>
    function_ref(nontype_t<f>, T&&) -> function_ref</* voir description */>;
}

Modèle de classe 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 uniquement
      ForwardIter1 pat_last_;             // exposition uniquement
      BinaryPredicate pred_;              // exposition uniquement
  };
}

Modèle de classe 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_;       // à titre d'illustration uniquement
      RandomAccessIter1 pat_last_;        // à titre d'illustration uniquement
      Hash hash_;                         // à titre d'illustration uniquement
      BinaryPredicate pred_;              // à titre d'illustration uniquement
    };
}

Modèle de classe 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 uniquement
      RandomAccessIter1 pat_last_;        // exposition uniquement
      Hash hash_;                         // exposition uniquement
      BinaryPredicate pred_;              // exposition uniquement
  };
}

Voir aussi

std::hash spécialisations pour les types de bibliothèque