[ Web Proxy ]
URL:
Viewing: https://ru.cppreference.com/cpp/header/functional [Back]  [Original]

<functional> cppreference.com
cppreference.com

<functional>

cppreference.com
 
C++
(C++20)
(C++20)
(C++11)
(C++20)
/
(C++11)
(C++11)
(C++11)
(C++17)
 
<concepts> (C++20)
<system_error> (C++11)

<memory_resource> (C++17)  
<type_traits> (C++11)
<ratio> (C++11)
<utility>
<tuple> (C++11)
<optional> (C++17)
<variant> (C++17)
<any> (C++17)
<expected> (C++23)
<bitset>

<charconv> (C++17)
<format> (C++20)
<bit> (C++20)

<cuchar> (C++11)

<flat_set> (C++23)
<span> (C++20)
<mdspan> (C++23)

<iterator>
<ranges> (C++20)
<generator> (C++23)
<cfenv> (C++11)
<complex>
<numbers> (C++20)

<chrono> (C++11)
<codecvt> (C++11/17*)
/
<filesystem> (C++17)
<cstdio>
<cinttypes> (C++11)
<strstream> (C++98*)
<regex> (C++11)
<stop_token> (C++20)
<thread> (C++11)
<atomic> (C++11)
<stdatomic.h> (C++23)
<mutex> (C++11)
<shared_mutex> (C++14)
<condition_variable> (C++11)  
<semaphore> (C++20)
<latch> (C++20)
<barrier> (C++20)
<future> (C++11)

C
<cstdbool> (C++11/17/20*)  
<ccomplex> (C++11/17/20*)
<ctgmath> (C++11/17/20*)

<cstdalign> (C++11/17/20*)

<ciso646> ( C++20)

 

-.

placeholders (C++11) std::bind

(C++11)

( ) []

( ) []
std::move_only_function,
( ) []

( ) []
(C++11)

( ) []
CopyConstructible CopyAssignable
( ) []
, std::reference_wrapper
( ) []
, std::function
() []
, std::bind
( ) []
,
( ) []
, x + y
( ) []
, x - y
( ) []
, x * y
( ) []
, x / y
( ) []
, x % y
( ) []
, -x
( ) []
, x == y
( ) []
, x != y
( ) []
, x > y
( ) []
, x < y
( ) []
, x >= y
( ) []
, x <= y
( ) []
, x == y
() []
, x != y
() []
, x > y
() []
, x < y
() []
, x >= y
() []
, x <= y
() []
, x <=> y
() []
, x && y
( ) []
, x || y
( ) []
, !x
( ) []
, x & y
( ) []
, x | y
( ) []
, x ^ y
( ) []
(C++14)
, ~x
( ) []
(C++17)
, ,
( ) []
(C++20)
,
() []
C++
( ) []
-
( ) []
--
( ) []
(C++11)
-
( ) []
std::hash ,
( )

std::placeholders
std::bind
() []

(C++20)(C++23)

( ) []
(C++11)

( ) []
(C++11)(C++11)
std::reference_wrapper ,
( ) []
(C++17)(C++23)
Callable ( C++23)
( ) []

C++11 C++17

( C++11)( C++17)

( ) []
(deprecated in C++11)( C++17)

( ) []
( C++11)( C++17)
,
( ) []
( C++11)( C++17)

( ) []

( ) []

( ) []
( C++11)( C++17)

( ) []
-,
( ) []
( C++11)( C++17)
-,
( ) []
-,
( ) []
( C++11)( C++17)
-,
( ) []

C++17 C++20

( C++17)( C++20)
, ,
( ) []
(deprecated in C++17)( C++20)
-,
( ) []
( C++17)( C++20)
std::unary_negate
( ) []
( C++17)( C++20)
std::binary_negate
( ) []

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

  // reference_wrapper
  template<class T> class reference_wrapper;

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

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

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

  //  
  template<class T = void> struct plus;
  template<class T = void> struct minus;
  template<class T = void> struct multiplies;
  template<class T = void> struct divides;
  template<class T = void> struct modulus;
  template<class T = void> struct negate;
  template<> struct plus<void>;
  template<> struct minus<void>;
  template<> struct multiplies<void>;
  template<> struct divides<void>;
  template<> struct modulus<void>;
  template<> struct negate<void>;

  // 
  template<class T = void> struct equal_to;
  template<class T = void> struct not_equal_to;
  template<class T = void> struct greater;
  template<class T = void> struct less;
  template<class T = void> struct greater_equal;
  template<class T = void> struct less_equal;
  template<> struct equal_to<void>;
  template<> struct not_equal_to<void>;
  template<> struct greater<void>;
  template<> struct less<void>;
  template<> struct greater_equal<void>;
  template<> struct less_equal<void>;

  //  
  template<class T = void> struct logical_and;
  template<class T = void> struct logical_or;
  template<class T = void> struct logical_not;
  template<> struct logical_and<void>;
  template<> struct logical_or<void>;
  template<> struct logical_not<void>;

  //  
  template<class T = void> struct bit_and;
  template<class T = void> struct bit_or;
  template<class T = void> struct bit_xor;
  template<class T = void> struct bit_not;
  template<> struct bit_and<void>;
  template<> struct bit_or<void>;
  template<> struct bit_xor<void>;
  template<> struct bit_not<void>;

  // 
  struct identity;

  //   not_fn
  template<class F> constexpr /*  */ not_fn(F&& f);

  //   bind_front  bind_back
  template<class F, class... Args> constexpr /*  */ bind_front(F&&, Args&&...);
  template<class F, class... Args> constexpr /*  */ bind_back(F&&, Args&&...);

  // 
  template<class T> struct is_bind_expression;
  template<class T> struct is_placeholder;

  template<class F, class... BoundArgs>
    constexpr /*  */ bind(F&&, BoundArgs&&...);
  template<class R, class F, class... BoundArgs>
    constexpr /*  */ bind(F&&, BoundArgs&&...);

  namespace placeholders {
    // M   ,  
    /*   */ _1;
    /*   */ _2;
               .
               .
               .
    /*   */ _M;
  }

  //  -
  template<class R, class T>
    constexpr /*  */ mem_fn(R T::*) noexcept;

  //   
  class bad_function_call;

  template<class> class function; //  
  template<class R, class... ArgTypes> class function<R(ArgTypes...)>;

  template<class R, class... ArgTypes>
    void swap(function<R(ArgTypes...)>&, function<R(ArgTypes...)>&) noexcept;

  template<class R, class... ArgTypes>
    bool operator==(const function<R(ArgTypes...)>&, nullptr_t) noexcept;

  template<class...> class move_only_function; //  

  template<class R, class... ArgTypes>
    class move_only_function<R(ArgTypes...) /*cv ref*/ noexcept(/*noex*/)>;

  // 
  template<class ForwardIter, class BinaryPredicate = equal_to<>>
    class default_searcher;

  template<class RandomAccessIter,
           class Hash = hash<typename iterator_traits<RandomAccessIter>::value_type>,
           class BinaryPredicate = equal_to<>>
    class boyer_moore_searcher;

  template<class RandomAccessIter,
           class Hash = hash<typename iterator_traits<RandomAccessIter>::value_type>,
           class BinaryPredicate = equal_to<>>
    class boyer_moore_horspool_searcher;

  //   -
  template<class T>
    struct hash;

  //   
  template<class T>
    inline constexpr bool is_bind_expression_v = is_bind_expression<T>::value;
  template<class T>
    inline constexpr int is_placeholder_v = is_placeholder<T>::value;

  namespace ranges {
    //   
    struct equal_to;
    struct not_equal_to;
    struct greater;
    struct less;
    struct greater_equal;
    struct less_equal;
  }
}

std::reference_wrapper

namespace std {
  template<class T> class reference_wrapper {
  public:
    // 
    using type = T;

    // //
    template<class U>
      constexpr reference_wrapper(U&&) noexcept(see below);
    constexpr reference_wrapper(const reference_wrapper& x) noexcept;

    // 
    constexpr reference_wrapper& operator=(const reference_wrapper& x) noexcept;

    // 
    constexpr operator T& () const noexcept;
    constexpr T& get() const noexcept;

    // 
    template<class... ArgTypes>
      constexpr invoke_result_t<T&, ArgTypes...> operator()(ArgTypes&&...) const;
  };
  template<class T>
    reference_wrapper(T&) -> reference_wrapper<T>;
}

std::unwrap_reference

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

std::unwrap_ref_decay

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

std::plus

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

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

    using is_transparent = /*  */;
  };
}

std::minus

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

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

    using is_transparent = /*  */;
  };
}

std::multiplies

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

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

    using is_transparent = /*  */;
  };
}

std::divides

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

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

    using is_transparent = /*  */;
  };
}

std::modulus

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

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

    using is_transparent = /*  */;
  };
}

std::negate

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

  template<> struct negate<void> {
    template<class T> constexpr auto operator()(T&& t) const
      -> decltype(-std::forward<T>(t));

    using is_transparent = /*  */;
  };
}

std::equal_to

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

  template<> struct equal_to<void> {
    template<class T, class U> constexpr auto operator()(T&& t, U&& u) const
      -> decltype(std::forward<T>(t) == std::forward<U>(u));
  
    using is_transparent = /*  */;
  };
}

std::not_equal_to

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

  template<> struct not_equal_to<void> {
    template<class T, class U> constexpr auto operator()(T&& t, U&& u) const
      -> decltype(std::forward<T>(t) != std::forward<U>(u));
  
    using is_transparent = /*  */;
  };
}

std::greater

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

  template<> struct greater<void> {
    template<class T, class U> constexpr auto operator()(T&& t, U&& u) const
      -> decltype(std::forward<T>(t) > std::forward<U>(u));
  
    using is_transparent = /*  */;
  };
}

std::less

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

  template<> struct less<void> {
    template<class T, class U> constexpr auto operator()(T&& t, U&& u) const
      -> decltype(std::forward<T>(t) < std::forward<U>(u));
  
    using is_transparent = /*  */;
  };
}

std::greater_equal

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

  template<> struct greater_equal<void> {
    template<class T, class U> constexpr auto operator()(T&& t, U&& u) const
      -> decltype(std::forward<T>(t) >= std::forward<U>(u));
  
    using is_transparent = /*  */;
  };
}

std::less_equal

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

  template<> struct less_equal<void> {
    template<class T, class U> constexpr auto operator()(T&& t, U&& u) const
      -> decltype(std::forward<T>(t) <= std::forward<U>(u));
  
    using is_transparent = /*  */;
  };
}

std::ranges::equal_to

namespace std::ranges {
  struct equal_to {
    template<class T, class U>
    constexpr bool operator()(T&& t, U&& u) const;

    using is_transparent = /*  */;
  };
}

std::ranges::not_equal_to

namespace std::ranges {
  struct not_equal_to {
    template<class T, class U>
    constexpr bool operator()(T&& t, U&& u) const;

    using is_transparent = /*  */;
  };
}

std::ranges::greater

namespace std::ranges {
  struct greater {
    template<class T, class U>
    constexpr bool operator()(T&& t, U&& u) const;

    using is_transparent = /*  */;
  };
}

std::ranges::less

namespace std::ranges {
  struct less {
    template<class T, class U>
    constexpr bool operator()(T&& t, U&& u) const;

    using is_transparent = /*  */;
  };
}

std::ranges::greater_equal

namespace std::ranges {
  struct greater_equal {
    template<class T, class U>
    constexpr bool operator()(T&& t, U&& u) const;

    using is_transparent = /*  */;
  };
}

std::ranges::less_equal

namespace std::ranges {
  struct less_equal {
    template<class T, class U>
    constexpr bool operator()(T&& t, U&& u) const;

    using is_transparent = /*  */;
  };
}

std::logical_and

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

  template<> struct logical_and<void> {
    template<class T, class U> constexpr auto operator()(T&& t, U&& u) const
      -> decltype(std::forward<T>(t) && std::forward<U>(u));
  
    using is_transparent = /*  */;
  };
}

std::logical_or

namespace std {
  template<class T = void> struct logical_or {
    constexpr bool operator()(const T& x, const T& y) const;
  };
  
  template<> struct logical_or<void> {
    template<class T, class U> constexpr auto operator()(T&& t, U&& u) const
      -> decltype(std::forward<T>(t) || std::forward<U>(u));
  
    using is_transparent = /*  */;
  };
}

std::logical_not

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

  template<> struct logical_not<void> {
    template<class T> constexpr auto operator()(T&& t) const
      -> decltype(!std::forward<T>(t));

    using is_transparent = /*  */;
  };
}

std::bit_and

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

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

    using is_transparent = /*  */;
  };
}

std::bit_or

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

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

    using is_transparent = /*  */;
  };
}

std::bit_xor

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

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

    using is_transparent = /*  */;
  };
}

std::bit_not

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

  template<> struct bit_not<void> {
    template<class T> constexpr auto operator()(T&& t) const
      -> decltype(~std::forward<T>(t));

    using is_transparent = /*  */;
  };
}

std::identity

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

    using is_transparent = /*  */;
  };
}

std::is_bind_expression

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

std::is_placeholder

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

std::bad_function_call

namespace std {
  class bad_function_call : public exception {
  public:
    //  [exception]    -
    const char* what() const noexcept override;
  };
}

std::function

namespace std {
  template<class> class function; //  

  template<class R, class... ArgTypes>
  class function<R(ArgTypes...)> {
  public:
    using result_type = R;

    // //
    function() noexcept;
    function(nullptr_t) noexcept;
    function(const function&);
    function(function&&) noexcept;
    template<class F> function(F);

    function& operator=(const function&);
    function& operator=(function&&);
    function& operator=(nullptr_t) noexcept;
    template<class F> function& operator=(F&&);
    template<class F> function& operator=(reference_wrapper<F>) noexcept;

    ~function();

    //  
    void swap(function&) noexcept;

    //  
    explicit operator bool() const noexcept;

    //  
    R operator()(ArgTypes...) const;

    //    
    const type_info& target_type() const noexcept;
    template<class T>       T* target() noexcept;
    template<class T> const T* target() const noexcept;
  };

  template<class R, class... ArgTypes>
    function(R(*)(ArgTypes...)) -> function<R(ArgTypes...)>;

  template<class F> function(F) -> function</*   */>;

  //    
  template<class R, class... ArgTypes>
    bool operator==(const function<R(ArgTypes...)>&, nullptr_t) noexcept;

  //  
  template<class R, class... ArgTypes>
    void swap(function<R(ArgTypes...)>&, function<R(ArgTypes...)>&) noexcept;
}

std::move_only_function

namespace std {
  template<class... S> class move_only_function; //  

  template<class R, class... ArgTypes>
  class move_only_function<R(ArgTypes...) /*cv-ref*/ noexcept(/*noex*/)> {
  public:
    using result_type = R;

    // //
    move_only_function() noexcept;
    move_only_function(nullptr_t) noexcept;
    move_only_function(move_only_function&&) noexcept;
    template<class F> move_only_function(F&&);

    template<class T, class... Args>
      explicit move_only_function(in_place_type_t<T>, Args&&...);
    template<class T, class U, class... Args>
      explicit move_only_function(in_place_type_t<T>, initializer_list<U>, Args&&...);

    move_only_function& operator=(move_only_function&&);
    move_only_function& operator=(nullptr_t) noexcept;
    template<class F> move_only_function& operator=(F&&);

    ~move_only_function();

    //  move_only_function
    explicit operator bool() const noexcept;

    R operator()(ArgTypes...) /*cv-ref*/ noexcept(/*noex*/);

    //  move_only_function
    void swap(move_only_function&) noexcept;

    friend void swap(move_only_function&, move_only_function&) noexcept;

    friend bool operator==(const move_only_function&, nullptr_t) noexcept;

  private:
    template<class VT>
      //   
      static constexpr bool /*--*/ = /*   */;
  };
}

std::default_searcher

namespace std {
  template<class ForwardIter1, class BinaryPredicate = equal_to<>>
    class default_searcher {
    public:
      constexpr default_searcher(ForwardIter1 pat_first, ForwardIter1 pat_last,
                                 BinaryPredicate pred = BinaryPredicate());
  
      template<class ForwardIter2>
        constexpr pair<ForwardIter2, ForwardIter2>
          operator()(ForwardIter2 first, ForwardIter2 last) const;

    private:
      ForwardIter1 pat_first_;            //   
      ForwardIter1 pat_last_;             //   
      BinaryPredicate pred_;              //   
  };
}

std::boyer_moore_searcher

namespace std {
  template<class RandomAccessIter1,
           class Hash = hash<typename iterator_traits<RandomAccessIter1>::value_type>,
           class BinaryPredicate = equal_to<>>
    class boyer_moore_searcher {
    public:
      boyer_moore_searcher(RandomAccessIter1 pat_first,
                           RandomAccessIter1 pat_last,
                           Hash hf = Hash(),
                           BinaryPredicate pred = BinaryPredicate());

      template<class RandomAccessIter2>
        pair<RandomAccessIter2, RandomAccessIter2>
          operator()(RandomAccessIter2 first, RandomAccessIter2 last) const;

    private:
      RandomAccessIter1 pat_first_;       //   
      RandomAccessIter1 pat_last_;        //   
      Hash hash_;                         //   
      BinaryPredicate pred_;              //   
    };
}

std::boyer_moore_horspool_searcher

namespace std {
  template<class RandomAccessIter1,
           class Hash = hash<typename iterator_traits<RandomAccessIter1>::value_type>,
           class BinaryPredicate = equal_to<>>
    class boyer_moore_horspool_searcher {
    public:
      boyer_moore_horspool_searcher(RandomAccessIter1 pat_first,
                                    RandomAccessIter1 pat_last,
                                    Hash hf = Hash(),
                                    BinaryPredicate pred = BinaryPredicate());

      template<class RandomAccessIter2>
        pair<RandomAccessIter2, RandomAccessIter2>
          operator()(RandomAccessIter2 first, RandomAccessIter2 last) const;

    private:
      RandomAccessIter1 pat_first_;       //   
      RandomAccessIter1 pat_last_;        //   
      Hash hash_;                         //   
      BinaryPredicate pred_;              //   
  };
}

<string> std::hash std::string, std::u16string, std::u32string, std::wstring
<string_view> std::hash std::string_view, std::u16string_view, std::u32string_view, std::wstring_view
<system_error> std::hash std::error_code
<bitset> std::hash std::bitset
<memory> std::hash std::unique_ptr, std::shared_ptr
<typeindex> std::hash std::type_index
<vector> std::hash std::vector<bool>
<thread> std::hash std::thread::id
<optional> std::hash std::optional
<variant> std::hash std::variant
<coroutine> std::hash std::coroutine_handle
<stacktrace> std::hash std::stacktrace_entry and std::basic_stacktrace

Web Proxy Viewer  |  New URL  |  Original Page