##### cppreference.com

##### Search

Create account

##### Namespaces

- Page
- Discussion

##### Variants

##### Views

- View
- Edit
- History

##### Actions

# std::experimental::apply

From cppreference.com
< cpp‎ | experimental

| Merged into ISO C++ The functionality described on this page was merged into the mainline ISO C++ standard as of 3/2016, see `std::apply` (since C++17)

Defined in header `<experimental/tuple>` |  |
template <class F, class Tuple> constexpr decltype(auto) apply(F&& f, Tuple&& t); |  | (library fundamentals TS)

Invoke the `Callable` object `f` with a tuple of arguments.

### [edit] Parameters

f | - | `Callable` object to be invoked
t | - | tuple whose elements to be used as arguments to `f`

### [edit] Return value

What returned by `f`.

### [edit] Possible implementation

    namespace detail {
    template <class F, class Tuple, std::size_t... I>
    constexpr decltype(auto) apply_impl( F&& f, Tuple&& t, std::index_sequence<I...> )
    {
      return std::invoke(std::forward<F>(f), std::get<I>(std::forward<Tuple>(t))...);
      // Note: std::invoke is a C++17 feature
    }
    } // namespace detail

    template <class F, class Tuple>
    constexpr decltype(auto) apply(F&& f, Tuple&& t)
    {
        return detail::apply_impl(std::forward<F>(f), std::forward<Tuple>(t),
            std::make_index_sequence<std::tuple_size_v<std::decay_t<Tuple>>>{});
    }

### [edit] Example

| This section is incomplete Reason: no example

### [edit] See also

make_tuple | creates a `tuple` object of the type defined by the argument types (function template) [edit]
forward_as_tuple | creates a `tuple` of rvalue references (function template) [edit]

Retrieved from "http://en.cppreference.com/mwiki/index.php?title=cpp/experimental/apply&oldid=85708"
Category:

- Todo no example