Namespaces
Variants

Standard library header <functional>

From cppreference.net
Standard library headers

Dieser Header ist Teil der Function Objects -Bibliothek und stellt die standardmäßige Hash-Funktion bereit.

Inhaltsverzeichnis

Namespaces

placeholders (C++11) Stellt Platzhalter für die ungebundenen Argumente in einem std::bind Ausdruck bereit

Klassen

Wrapper
(C++11)
kopierbarer Wrapper für jedes kopierkonstruierbare aufrufbare Objekt
(Klassentemplate)
Nur-verschiebbare Wrapper-Klasse für jedes aufrufbare Objekt, das Qualifizierer in einer gegebenen Aufrufsignatur unterstützt
(Klassen-Template)
Kopierfähiger Wrapper für jedes kopierkonstruierbare aufrufbare Objekt, das Qualifizierer in einer gegebenen Aufrufsignatur unterstützt
(Klassentemplate)
Nicht-besitzende Wrapper-Klasse für beliebige aufrufbare Objekte
(Klassen-Template)
(C++11)
erstellt ein Funktionsobjekt aus einem Zeiger auf ein Mitglied
(Funktions-Template)
CopyConstructible und CopyAssignable Referenz-Wrapper
(Klassen-Template)
erhält den Referenztyp, der in std::reference_wrapper eingepackt ist
(Klassen-Template)
Hilfsklassen
die Ausnahme, die beim Aufruf eines leeren std::function geworfen wird
(Klasse)
zeigt an, dass ein Objekt ein std::bind Ausdruck ist oder als solcher verwendet werden kann
(Klassentemplate)
zeigt an, dass ein Objekt ein Standard-Platzhalter ist oder als solcher verwendet werden kann
(Klassentemplate)
Arithmetische Operationen
Funktionsobjekt, das x + y implementiert
(Klassentemplate)
Funktionsobjekt, das x - y implementiert
(Klassentemplate)
Funktionsobjekt, das x * y implementiert
(Klassentemplate)
Funktionsobjekt, das x / y implementiert
(Klassentemplate)
Funktionsobjekt, das x % y implementiert
(Klassentemplate)
Funktionsobjekt, das - x
(Klassentemplate)
Vergleiche
Funktionsobjekt, das x == y implementiert
(Klassentemplate)
Funktionsobjekt, das x ! = y implementiert
(Klassentemplate)
Funktionsobjekt, das x > y implementiert
(Klassen-Template)
Funktionsobjekt, das x < y implementiert
(Klassen-Template)
Funktionsobjekt, das x >= y implementiert
(Klassentemplate)
Funktionsobjekt, das x <= y implementiert
(Klassentemplate)
Konzept-beschränkte Vergleiche
eingeschränktes Funktionsobjekt, das x == y implementiert
(Klasse)
Eingeschränktes Funktionsobjekt, das x ! = y implementiert
(Klasse)
eingeschränktes Funktionsobjekt, das x > y implementiert
(Klasse)
eingeschränktes Funktionsobjekt, das x < y implementiert
(Klasse)
eingeschränktes Funktionsobjekt, das x >= y implementiert
(Klasse)
eingeschränktes Funktionsobjekt, das x <= y implementiert
(Klasse)
eingeschränktes Funktionsobjekt, das x <=> y implementiert
(Klasse)
Logische Operationen
Funktionsobjekt, das x && y implementiert
(Klassentemplate)
Funktionsobjekt, das x || y implementiert
(Klassentemplate)
Funktionsobjekt, das ! x implementiert
(Klassen-Template)
Bitweise Operationen
Funktionsobjekt, das x & y implementiert
(Klassentemplate)
Funktionsobjekt, das x | y implementiert
(Klassentemplate)
Funktionsobjekt, das x ^ y implementiert
(Klassentemplate)
(C++14)
Funktionsobjekt, das ~x implementiert
(Klassentemplate)
Negatoren
(C++17)
erstellt ein Funktionsobjekt, das das Komplement des Ergebnisses des von ihm gehaltenen Funktionsobjekts zurückgibt
(Funktions-Template)
Identitäten
(C++20)
Funktionsobjekt, das sein Argument unverändert zurückgibt
(Klasse)
Searcher
Implementierung des Standard-C++-Bibliothekssuchalgorithmus
(Klassentemplate)
Implementierung des Boyer-Moore-Suchalgorithmus
(Klassentemplate)
Implementierung des Boyer-Moore-Horspool-Suchalgorithmus
(Klassentemplate)
Hashing
(C++11)
Hash-Funktionsobjekt
(Klassentemplate)
std::hash Spezialisierungen für fundamentale, Aufzählungs- und Zeigertypen
(Klassentemplate-Spezialisierung)

Konstanten

Definiert im namespace std::placeholders
Platzhalter für die ungebundenen Argumente in einem std::bind Ausdruck
(Konstante)

Funktionen

(C++20) (C++23)
bindet eine variable Anzahl von Argumenten in gegebener Reihenfolge an ein Funktionsobjekt
(Funktions-Template)
(C++11)
bindet ein oder mehrere Argumente an ein Funktionsobjekt
(Funktions-Template)
(C++11) (C++11)
erzeugt einen std::reference_wrapper mit einem von seinem Argument abgeleiteten Typ
(Funktions-Template)
(C++17) (C++23)
ruft jedes Callable Objekt mit gegebenen Argumenten auf und Möglichkeit zur Spezifikation des Rückgabetyps (seit C++23)
(Funktions-Template)

In C++11 als veraltet markiert und in C++17 entfernt

Basis
(veraltet in C++11) (entfernt in C++17)
Adapter-kompatible Basisklasse für unäre Funktionen
(Klassen-Template)
(veraltet in C++11) (entfernt in C++17)
Adapter-kompatible Basisklasse für binäre Funktionen
(Klassen-Template)
Binder
(veraltet in C++11) (entfernt in C++17)
Funktionsobjekt, das eine binäre Funktion und eines ihrer Argumente hält
(Klassen-Template)
(veraltet in C++11) (entfernt in C++17)
bindet ein Argument an eine binäre Funktion
(Funktions-Template)
Funktionsadapter
(veraltet in C++11) (entfernt in C++17)
Adapter-kompatible Wrapper-Klasse für einen Zeiger auf eine unäre Funktion
(Klassen-Template)
(veraltet in C++11) (entfernt in C++17)
Adapter-kompatible Wrapper-Klasse für einen Zeiger auf eine binäre Funktion
(Klassen-Template)
(veraltet in C++11) (entfernt in C++17)
erzeugt einen Adapter-kompatiblen Funktionsobjekt-Wrapper aus einem Funktionszeiger
(Funktions-Template)
(veraltet in C++11) (entfernt in C++17)
Wrapper für einen Zeiger auf eine nulläre oder unäre Memberfunktion, aufrufbar mit einem Zeiger auf ein Objekt
(Klassen-Template)
(veraltet in C++11) (entfernt in C++17)
erzeugt einen Wrapper aus einem Zeiger auf eine Memberfunktion, aufrufbar mit einem Zeiger auf ein Objekt
(Funktions-Template)
Wrapper für einen Zeiger auf eine nulläre oder unäre Memberfunktion, aufrufbar mit einer Referenz auf ein Objekt
(Klassen-Template)
(veraltet in C++11) (entfernt in C++17)
erzeugt einen Wrapper aus einem Zeiger auf eine Memberfunktion, aufrufbar mit einer Referenz auf ein Objekt
(Funktions-Template)

In C++17 veraltet und in C++20 entfernt

Negatoren
(veraltet in C++17) (entfernt in C++20)
Wrapper-Funktionsobjekt, das das Komplement des unären Prädikats zurückgibt, das es enthält
(Klassentemplate)
(veraltet in C++17) (entfernt in C++20)
Wrapper-Funktionsobjekt, das das Komplement des binären Prädikats zurückgibt, das es enthält
(Klassentemplate)
(veraltet in C++17) (entfernt in C++20)
erstellt ein benutzerdefiniertes std::unary_negate Objekt
(Funktionstemplate)
(veraltet in C++17) (entfernt in C++20)
erstellt ein benutzerdefiniertes std::binary_negate Objekt
(Funktionstemplate)

Übersicht

namespace std {
  // aufrufen
  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 bezogene Spezialisierungen
  template<class R, class T, template<class> class RQual, template<class> class TQual>
    requires /* siehe unten */
  struct basic_common_reference<R, T, RQual, TQual>;
  template<class T, class R, template<class> class TQual, template<class> class RQual>
    requires /* siehe unten */
  struct basic_common_reference<T, R, TQual, RQual>;
  // arithmetische Operationen
  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>;
  // Vergleiche
  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>;
  // logische Operationen
  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>;
  // bitweise Operationen
  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ät
  struct identity;
  // Funktionsvorlage not_fn
  template<class F> constexpr /* nicht spezifiziert */ not_fn(F&& f);
  // Funktionsvorlagen bind_front und bind_back
  template<class F, class... Args> constexpr /* nicht spezifiziert */ bind_front(F&&, Args&&...);
  template<class F, class... Args> constexpr /* nicht spezifiziert */ 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 /* nicht spezifiziert */ bind(F&&, BoundArgs&&...);
  template<class R, class F, class... BoundArgs>
    constexpr /* nicht spezifiziert */ bind(F&&, BoundArgs&&...);
  namespace placeholders {
    // M ist die implementierungsdefinierte Anzahl von Platzhaltern
    /* siehe Beschreibung */ _1;
    /* siehe Beschreibung */ _2;
               .
               .
               .
    /* siehe Beschreibung */ _M;
  }
  // Member-Funktions-Adapter
  template<class R, class T>
    constexpr /* nicht spezifiziert */ mem_fn(R T::*) noexcept;
  // polymorphe Funktionswrapper
  class bad_function_call;
  template<class> class function; // nicht definiert
  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;
  // Nur-Bewegen-Wrapper
  template<class...> class move_only_function; // nicht definiert
  template<class R, class... ArgTypes>
    class move_only_function<R(ArgTypes...) /*cv ref*/ noexcept(/*noex*/)>;
  // kopierbare Wrapper
  template<class...> class copyable_function; // not defined
  template<class R, class... ArgTypes>
    class copyable_function<R(ArgTypes...) /*cv ref*/ noexcept(/*noex*/)>;
  // nicht-besitzende Wrapper
  template<class...> class function_ref; // nicht definiert
  template<class R, class... ArgTypes>
    class function_ref<R(ArgTypes...) /*cv*/ noexcept(/*noex*/)>;
  // Searcher
  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-Funktion Primär-Template
  template<class T>
    struct hash;
  // konzept-beschränkte Vergleiche
  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 /*aufrufbar*/ =
      requires (Fn&& fn, Args&&... args) {
        std::forward<Fn>(fn)(std::forward<Args>(args)...);
      };
  // exposition only
  template<class Fn, class... Args>
    concept /*nothrow-callable*/ =
      /*aufrufbar*/<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));
}

Klassentemplate std::reference_wrapper

namespace std {
  template<class T> class reference_wrapper {
  public:
    // Typen
    using type = T;
    // Konstruktion/Kopieren/Zerstörung
    template<class U>
      constexpr reference_wrapper(U&&) noexcept(/* siehe unten */);
    constexpr reference_wrapper(const reference_wrapper& x) noexcept;
    // Zuweisung
    constexpr reference_wrapper& operator=(const reference_wrapper& x) noexcept;
    // Zugriff
    constexpr operator T& () const noexcept;
    constexpr T& get() const noexcept;
    // Aufruf
    template<class... ArgTypes>
      constexpr invoke_result_t<T&, ArgTypes...> operator()(ArgTypes&&...) const
        noexcept(is_nothrow_invocable_v<T&, ArgTypes...>);
    // Vergleich
    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>);
  };
  // Ableitungsanleitungen
  template<class T>
    reference_wrapper(T&) -> reference_wrapper<T>;
}

Klassentemplate std::unwrap_reference

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

Klassentemplate std::unwrap_ref_decay

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

Klassentemplate 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 = /* nicht spezifiziert */;
  };
}

Klassentemplate 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 = /* nicht spezifiziert */;
  };
}

Klassentemplate 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 = /* nicht spezifiziert */;
  };
}

Klassentemplate 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 = /* nicht spezifiziert */;
  };
}

Klassentemplate 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 = /* nicht spezifiziert */;
  };
}

Klassentemplate 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 = /* nicht spezifiziert */;
  };
}

Klassentemplate 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 = /* nicht spezifiziert */;
  };
}

Klassentemplate 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 = /* nicht spezifiziert */;
  };
}

Klassentemplate 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 = /* nicht spezifiziert */;
  };
}

Klassentemplate 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 = /* nicht spezifiziert */;
  };
}

Klassentemplate 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 = /* nicht spezifiziert */;
  };
}

Klassentemplate 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 = /* nicht spezifiziert */;
  };
}

Klasse 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 = /* nicht spezifiziert */;
  };
}

Klasse 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 = /* nicht spezifiziert */;
  };
}

Klasse 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 = /* nicht spezifiziert */;
  };
}

Klasse std::ranges::greater

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

Klasse std::ranges::less

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

Klasse 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 */;
  };
}
**Übersetzung des Textes:** Der C++-Code selbst bleibt unverändert, da er innerhalb von `
`-Tags steht und C++-spezifische Begriffe enthält. Die Übersetzung betrifft nur die erklärenden Texte:
- `namespace` → Namespace (bleibt unverändert als C++-Begriff)
- `struct` → Struktur (bleibt unverändert als C++-Begriff)  
- `template` → Template (bleibt unverändert als C++-Begriff)
- `class` → Klasse (bleibt unverändert als C++-Begriff)
- `constexpr` → Konstante Ausdrücke (bleibt unverändert als C++-Begriff)
- `bool` → Boolescher Wert (bleibt unverändert als C++-Begriff)
- `operator()` → Operator (bleibt unverändert als C++-Begriff)
- `const` → Konstante (bleibt unverändert als C++-Begriff)
- `using` → Using-Deklaration (bleibt unverändert als C++-Begriff)
- `is_transparent` → Transparent (bleibt unverändert als C++-Begriff)
- `/* unspecified */` → /* nicht spezifiziert */ (Kommentar übersetzt)
Die HTML-Struktur, Tags und Attribute bleiben vollständig erhalten.

Klasse 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 = /* nicht spezifiziert */;
  };
}

Klassentemplate 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 = /* nicht spezifiziert */;
  };
}

Klassentemplate 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 = /* nicht spezifiziert */;
  };
}

Klassentemplate 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 = /* nicht spezifiziert */;
  };
}

Klassentemplate 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 = /* nicht spezifiziert */;
  };
}

Klassentemplate 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 = /* nicht spezifiziert */;
  };
}

Klassentemplate 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 = /* nicht spezifiziert */;
  };
}

Klassentemplate 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 = /* nicht spezifiziert */;
  };
}

Klassentemplate std::identity

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

Klassentemplate std::is_bind_expression

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

Klassentemplate std::is_placeholder

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

Klasse std::bad_function_call

namespace std {
  class bad_function_call : public exception {
  public:
    // siehe [exception] für die Spezifikation der speziellen Elementfunktionen
    const char* what() const noexcept override;
  };
}

Klassentemplate std::function

namespace std {
  template<class> class function; // nicht definiert
  template<class R, class... ArgTypes>
  class function<R(ArgTypes...)> {
  public:
    using result_type = R;
    // Konstruktion/Kopieren/Zerstörung
    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();
    // Funktionsmodifikatoren
    void swap(function&) noexcept;
    // Funktionskapazität
    explicit operator bool() const noexcept;
    // Funktionsaufruf
    R operator()(ArgTypes...) const;
    // Zugriff auf Funktionsziel
    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</* siehe Beschreibung */>;
  // Nullzeiger-Vergleichsfunktionen
  template<class R, class... ArgTypes>
    bool operator==(const function<R(ArgTypes...)>&, nullptr_t) noexcept;
  // Spezialisierte Algorithmen
  template<class R, class... ArgTypes>
    void swap(function<R(ArgTypes...)>&, function<R(ArgTypes...)>&) noexcept;
}

Klassentemplate std::move_only_function

namespace std {
  template<class... S> class move_only_function; // nicht definiert
  template<class R, class... ArgTypes>
  class move_only_function<R(ArgTypes...) /*cv-ref*/ noexcept(/*noex*/)> {
  public:
    using result_type = R;
    // Konstruktion/Verschiebung/Zerstörung
    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();
    // Aufruf
    explicit operator bool() const noexcept;
    R operator()(ArgTypes...) /*cv-ref*/ noexcept(/*noex*/);
    // Dienstprogramme
    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:
    // Nur zur Darstellung
    template<class VT>
      static constexpr bool /*is-callable-from*/ = /* siehe Beschreibung */; 
  };
}

Klassentemplate std::copyable_function

namespace std {
  template<class... S> class copyable_function; // nicht definiert
  template<class R, class... ArgTypes>
  class copyable_function<R(ArgTypes...) /*cv-ref*/ noexcept(/*noex*/)> {
  public:
    using result_type = R;
    // Konstruktion/Bewegung/Zerstörung
    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();
    // Aufruf
    explicit operator bool() const noexcept;
    R operator()(ArgTypes...) /*cv-ref*/ noexcept(/*noex*/);
    // Dienstprogramme
    void swap(copyable_function&) noexcept;
    friend void swap(copyable_function&, copyable_function&) noexcept;
    friend bool operator==(const copyable_function&, nullptr_t) noexcept;
  private:
    // Nur zur Darstellung
    template<class VT>
      static constexpr bool /*is-callable-from*/ = /* siehe Beschreibung */; 
  };
}

Klassentemplate std::function_ref

namespace std {
  template<class... S> class function_ref; // nicht definiert
  template<class R, class... ArgTypes>
  class function_ref<R(ArgTypes...) /*cv*/ noexcept(/*noex*/)> {
  public:
    // Konstruktoren und Zuweisungsoperatoren
    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;
    // Aufruf
    R operator()(ArgTypes...) /*cv*/ noexcept(/*noex*/);
  private:
    // nur zur Darstellung
    template<class... T>
      static constexpr bool /*is-invocable-using*/ = /* siehe Beschreibung */;
    R (*thunk-ptr)(BoundEntityType, ArgTypes&&...) noexcept(/*noex*/); // nur zur Darstellung
    BoundEntityType bound-entity; // nur zur Darstellung
  };
  // Ableitungsleitfäden
  template<class F>
    function_ref(F*) -> function_ref<F>;
  template<auto f>
    function_ref(nontype_t<f>) -> function_ref</* siehe Beschreibung */>;
  template<auto f, class T>
    function_ref(nontype_t<f>, T&&) -> function_ref</* siehe Beschreibung */>;
}

Klassentemplate 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_;            // nur zur Darstellung
      ForwardIter1 pat_last_;             // nur zur Darstellung
      BinaryPredicate pred_;              // nur zur Darstellung
  };
}

Klassentemplate 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_;       // nur zur Darstellung
      RandomAccessIter1 pat_last_;        // nur zur Darstellung
      Hash hash_;                         // nur zur Darstellung
      BinaryPredicate pred_;              // nur zur Darstellung
    };
}

Klassentemplate 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_;       // nur zur Darstellung
      RandomAccessIter1 pat_last_;        // nur zur Darstellung
      Hash hash_;                         // nur zur Darstellung
      BinaryPredicate pred_;              // nur zur Darstellung
  };
}

Siehe auch

std::hash Spezialisierungen für Bibliothekstypen