std::experimental::ranges::invoke(3)

NAME
std::experimental::ranges::invoke - std::experimental::ranges::invoke

Synopsis
   Defined in header <experimental/ranges/functional>
   template < class F, class... Args > (ranges TS)
   std::result_of_t<F&&(Args&&...)> invoke(F&& f, Args&&... args);
   Invoke the Callable object f with the parameters args, and return the result, as if
   by return INVOKE(std::forward<F>(f), std::forward<Args>(args)...);, where INVOKE(f,
   t1, t2, ..., tN) is defined as follows:
     * if f is a pointer to member function of class T:
              * If std::is_base_of<T, std::decay_t<decltype(t1)>>::value is true, then
                INVOKE(f, t1, t2, ..., tN) is equivalent to (t1.*f)(t2, ..., tN)
              * otherwise, INVOKE(f, t1, t2, ..., tN) is equivalent to ((*t1).*f)(t2,
                ..., tN).
     * otherwise, if N == 1 and f is a pointer to data member of class T:
              * If std::is_base_of<T, std::decay_t<decltype(t1)>>::value is true, then
                INVOKE(f, t1) is equivalent to t1.*f
              * otherwise, then INVOKE(f, t1) is equivalent to (*t1).*f
     * otherwise, INVOKE(f, t1, t2, ..., tN) is equivalent to f(t1, t2, ..., tN) (that
       is, f is a FunctionObject)

Parameters
   f - Callable object to be invoked
   args - arguments to pass to f

See also
   invoke invokes any Callable object with given arguments
   invoke_r and possibility to specify return type
   (C++17) (since C++23)
   (C++23) (function template)