22 #ifndef LELY_UTIL_INVOKER_HPP_ 23 #define LELY_UTIL_INVOKER_HPP_ 36 template <
class Tuple>
40 template <::std::size_t... I>
43 noexcept(compat::invoke(::std::get<I>(::std::move(tuple_))...)))
44 -> decltype(compat::invoke(::std::get<I>(::std::move(tuple_))...)) {
45 return compat::invoke(::std::get<I>(::std::move(tuple_))...);
52 template <
class F,
class... Args,
53 class = typename ::std::enable_if<!::std::is_same<
54 typename ::std::decay<F>::type,
invoker>::value>::type>
55 explicit invoker(F&& f, Args&&... args)
56 : tuple_{::std::forward<F>(f), ::std::forward<Args>(args)...} {}
59 operator()() noexcept(
60 noexcept(::std::declval<invoker&>().invoke_(sequence_{})))
61 -> decltype(::std::declval<invoker&>().invoke_(sequence_{})) {
62 return invoke_(sequence_{});
72 template <
class F,
class... Args>
75 typename ::std::decay<Args>::type...>>;
81 template <
class F,
class... Args>
82 inline invoker_t<F, Args...>
84 return invoker_t<F, Args...>{::std::forward<F>(f),
85 ::std::forward<Args>(args)...};
91 #endif // !LELY_UTIL_INVOKER_HPP_
A compile-time sequence of integers.
invoker_t< F, Args... > make_invoker(F &&f, Args &&... args)
Creates a function object containing a Callable and its arguments.
make_integer_sequence<::std::size_t, N > make_index_sequence
A helper alias template for make_integer_sequence for the common case where T is std::size_t.
This header file is part of the compatibility library; it includes <utility> and defines any missing ...
This header file is part of the compatibility library; it includes <functional> and defines any missi...