Spec-Zone.ru › C++

Заголовок стандартной библиотеки <functional>

Этот заголовочный файл является частью библиотеки функциональных объектов и предоставляет стандартную хеш-функцию.

Пространства имён

placeholders (C++11) Предоставляет заполнители для несвязанных аргументов в выражении std::bind

Классы

Обёртки
function
(C++11)
копируемая обёртка для любого вызываемого объекта, который можно скопировать конструктором копирования
(шаблон класса)
move_only_function
(C++23)
перемещаемая обёртка для любого вызываемого объекта, поддерживающего квалификаторы в заданной сигнатуре вызова
(шаблон класса)
copyable_function
(C++26)
копируемая обёртка для любого вызываемого объекта, который можно скопировать конструктором копирования и который поддерживает квалификаторы в заданной сигнатуре вызова
(шаблон класса)
function_ref
(C++26)
не владеющая объектом обёртка для любого вызываемого объекта
(шаблон класса)
mem_fn
(C++11)
создаёт функциональный объект из указателя на член класса
(шаблон функции)
reference_wrapper
(C++11)
ссылочная обёртка, удовлетворяющая требованиям CopyConstructible и CopyAssignable
(шаблон класса)
unwrap_referenceunwrap_ref_decay
(C++20)(C++20)
получает тип ссылки, обёрнутой в std::reference_wrapper
(шаблон класса)
Вспомогательные классы
bad_function_call
(C++11)
исключение, выбрасываемое при вызове пустого std::function
(класс)
is_bind_expression
(C++11)
указывает, что объект является выражением std::bind или может использоваться в качестве такового
(шаблон класса)
is_placeholder
(C++11)
указывает, что объект является стандартным заполнителем или может использоваться в качестве такового
(шаблон класса)
Арифметические операции
plus
функциональный объект, реализующий x + y
(шаблон класса)
minus
функциональный объект, реализующий x - y
(шаблон класса)
multiplies
функциональный объект, реализующий x * y
(шаблон класса)
divides
функциональный объект, реализующий x / y
(шаблон класса)
modulus
функциональный объект, реализующий x % y
(шаблон класса)
negate
функциональный объект, реализующий -x
(шаблон класса)
Сравнения
equal_to
функциональный объект, реализующий x == y
(шаблон класса)
not_equal_to
функциональный объект, реализующий x != y
(шаблон класса)
greater
функциональный объект, реализующий x > y
(шаблон класса)
less
функциональный объект, реализующий x < y
(шаблон класса)
greater_equal
функциональный объект, реализующий x >= y
(шаблон класса)
less_equal
функциональный объект, реализующий x <= y
(шаблон класса)
Сравнения, ограниченные концептами
ranges::equal_to
(C++20)
ограниченный функциональный объект, реализующий x == y
(класс)
ranges::not_equal_to
(C++20)
ограниченный функциональный объект, реализующий x != y
(класс)
ranges::greater
(C++20)
ограниченный функциональный объект, реализующий x > y
(класс)
ranges::less
(C++20)
ограниченный функциональный объект, реализующий x < y
(класс)
ranges::greater_equal
(C++20)
ограниченный функциональный объект, реализующий x >= y
(класс)
ranges::less_equal
(C++20)
ограниченный функциональный объект, реализующий x <= y
(класс)
compare_three_way
(C++20)
ограниченный функциональный объект, реализующий x <=> y
(класс)
Логические операции
logical_and
функциональный объект, реализующий x && y
(шаблон класса)
logical_or
функциональный объект, реализующий x || y
(шаблон класса)
logical_not
функциональный объект, реализующий !x
(шаблон класса)
Побитовые операции
bit_and
функциональный объект, реализующий x & y
(шаблон класса)
bit_or
функциональный объект, реализующий x | y
(шаблон класса)
bit_xor
функциональный объект, реализующий x ^ y
(шаблон класса)
bit_not
(C++14)
функциональный объект, реализующий ~x
(шаблон класса)
Отрицатели
not_fn
(C++17)
создаёт функциональный объект, возвращающий логическое дополнение результата содержащегося в нём функционального объекта
(шаблон функции)
Функции тождества
identity
(C++20)
функциональный объект, возвращающий свой аргумент без изменений
(класс)
Средства поиска
default_searcher
(C++17)
реализация алгоритма поиска стандартной библиотеки C++
(шаблон класса)
boyer_moore_searcher
(C++17)
реализация алгоритма поиска Бойера — Мура
(шаблон класса)
boyer_moore_horspool_searcher
(C++17)
реализация алгоритма поиска Бойера — Мура — Хорспула
(шаблон класса)
Хеширование
hash
(C++11)
функциональный объект хеширования
(шаблон класса)
std::hash<Arithmetic>std::hash<Enumeration>std::hash<std::nullptr_t>std::hash<T*>
(C++11)
специализации std::hash для фундаментальных типов, типов-перечислений и типов-указателей
(специализация шаблона класса)

Константы

Определены в пространстве имён std::placeholders
_1, _2, _3, _4, ...
(C++11)
заполнители для несвязанных аргументов в выражении std::bind
(константа)

Функции

bind_frontbind_back
(C++20)(C++23)
связывают переменное число аргументов с функциональным объектом в заданном порядке
(шаблон функции)
bind
(C++11)
связывает один или несколько аргументов с функциональным объектом
(шаблон функции)
refcref
(C++11)(C++11)
создаёт std::reference_wrapper с типом, выведенным из аргумента
(шаблон функции)
invokeinvoke_r
(C++17)(C++23)
вызывает любой объект Callable с заданными аргументами и позволяет указать тип возвращаемого значения(начиная с C++23)
(шаблон функции)

Устарело в C++11 и удалено в C++17

Базовые классы
unary_function
(устарело в C++11)(удалено в C++17)
базовый класс унарной функции, совместимый с адаптерами
(шаблон класса)
binary_function
(устарело в C++11)(удалено в C++17)
базовый класс бинарной функции, совместимый с адаптерами
(шаблон класса)
Связыватели
binder1stbinder2nd
(устарело в C++11)(удалено в C++17)
функциональный объект, хранящий бинарную функцию и один из её аргументов
(шаблон класса)
bind1stbind2nd
(устарело в C++11)(удалено в C++17)
связывает один аргумент с бинарной функцией
(шаблон функции)
Адаптеры функций
pointer_to_unary_function
(устарело в C++11)(удалено в C++17)
совместимая с адаптерами обёртка для указателя на унарную функцию
(шаблон класса)
pointer_to_binary_function
(устарело в C++11)(удалено в C++17)
совместимая с адаптерами обёртка для указателя на бинарную функцию
(шаблон класса)
ptr_fun
(устарело в C++11)(удалено в C++17)
создаёт совместимую с адаптерами обёртку функционального объекта из указателя на функцию
(шаблон функции)
mem_fun_tmem_fun1_tconst_mem_fun_tconst_mem_fun1_t
(устарело в C++11)(удалено в C++17)
обёртка для указателя на функцию-член без аргументов или с одним аргументом, вызываемая с указателем на объект
(шаблон класса)
mem_fun
(устарело в C++11)(удалено в C++17)
создаёт обёртку из указателя на функцию-член, вызываемую с указателем на объект
(шаблон функции)
mem_fun_ref_tmem_fun1_ref_tconst_mem_fun_ref_tconst_mem_fun1_ref_t
(устарело в C++11)(удалено в C++17)
обёртка для указателя на функцию-член без аргументов или с одним аргументом, вызываемая со ссылкой на объект
(шаблон класса)
mem_fun_ref
(устарело в C++11)(удалено в C++17)
создаёт обёртку из указателя на функцию-член, вызываемую со ссылкой на объект
(шаблон функции)

Устарело в C++17 и удалено в C++20

Отрицатели
unary_negate
(устарело в C++17)(удалено в C++20)
функциональный объект-обёртка, возвращающий логическое дополнение хранимого унарного предиката
(шаблон класса)
binary_negate
(устарело в C++17)(удалено в C++20)
функциональный объект-обёртка, возвращающий логическое дополнение хранимого бинарного предиката
(шаблон класса)
not1
(устарело в C++17)(удалено в C++20)
создаёт пользовательский объект std::unary_negate
(шаблон функции)
not2
(устарело в C++17)(удалено в C++20)
создаёт пользовательский объект std::binary_negate
(шаблон функции)

Сводка

namespace std {
  // invoke
  template<class F, class... Args>
    constexpr invoke_result_t<F, Args...> invoke(F&& f, Args&&... args)
      noexcept(is_nothrow_invocable_v<F, Args...>);
  template<class R, class F, class... Args>
    constexpr R invoke_r(F&& f, Args&&... args)
      noexcept(is_nothrow_invocable_r_v<R, F, Args...>);

  // reference_wrapper
  template<class T> class reference_wrapper;

  template<class T> constexpr reference_wrapper<T> ref(T&) noexcept;
  template<class T> constexpr reference_wrapper<const T> cref(const T&) noexcept;
  template<class T> void ref(const T&&) = delete;
  template<class T> void cref(const T&&) = delete;

  template<class T>
    constexpr reference_wrapper<T> ref(reference_wrapper<T>) noexcept;
  template<class T>
    constexpr reference_wrapper<const T> cref(reference_wrapper<T>) noexcept;

  template<class T> struct unwrap_reference;
  template<class T> using unwrap_reference_t = typename unwrap_reference<T>::type;
  template<class T> struct unwrap_ref_decay;
  template<class T> using unwrap_ref_decay_t = typename unwrap_ref_decay<T>::type;

  // common_reference 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));
}

Шаблон класса 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>;
}

Шаблон класса std::unwrap_reference

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

Шаблон класса std::unwrap_ref_decay

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

Шаблон класса std::plus

namespace std {
  template<class T = void> struct plus {
    constexpr T operator()(const T& x, const T& y) const;
  };

  template<> struct plus<void> {
    template<class T, class U> constexpr auto operator()(T&& t, U&& u) const
      -> decltype(std::forward<T>(t) + std::forward<U>(u));

    using is_transparent = /* unspecified */;
  };
}

Шаблон класса 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 */;
  };
}

Шаблон класса 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 */;
  };
}

Шаблон класса 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 */;
  };
}

Шаблон класса 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 */;
  };
}

Шаблон класса 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 */;
  };
}

Шаблон класса 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 */;
  };
}

Шаблон класса 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 */;
  };
}

Шаблон класса 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 */;
  };
}

Шаблон класса 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 */;
  };
}

Шаблон класса 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 */;
  };
}

Шаблон класса 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 */;
  };
}

Класс 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 */;
  };
}

Класс 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 */;
  };
}

Класс 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 */;
  };
}

Класс 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 */;
  };
}

Класс 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 */;
  };
}

Класс 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 */;
  };
}

Класс 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 */;
  };
}

Шаблон класса 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 */;
  };
}

Шаблон класса 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 */;
  };
}

Шаблон класса 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 */;
  };
}

Шаблон класса 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 */;
  };
}

Шаблон класса 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 */;
  };
}

Шаблон класса 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 */;
  };
}

Шаблон класса 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 */;
  };
}

Шаблон класса std::identity

namespace std {
  struct identity {
    template<class T>
      constexpr T&& operator()(T&& t) const noexcept;

    using is_transparent = /* unspecified */;
  };
}

Шаблон класса std::is_bind_expression

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

Шаблон класса std::is_placeholder

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

Класс std::bad_function_call

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

Шаблон класса 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;
}

Шаблон класса 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 */; 
  };
}

Шаблон класса 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 */; 
  };
}

Шаблон класса 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 */>;
}

Шаблон класса 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
  };
}

Шаблон класса 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
    };
}

Шаблон класса 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
  };
}

См. также

std::hash специализации для типов библиотеки

© cppreference.com
Licensed under the Creative Commons Attribution-ShareAlike Unported License v3.0.
https://en.cppreference.com/cpp/header/functional

Spec-Zone.ru

Настройки Оффлайн Что нового Помощь О нас
Spec-Zone .ru
спецификации, руководства, описания, API