12 #include <type_traits> 20 #if defined(__cpp_lib_invoke) && __cpp_lib_invoke >= 201411L && defined(__cpp_lib_apply) && __cpp_lib_apply >= 201603L 22 using ::std::invoke_result;
23 using ::std::invoke_result_t;
24 using ::std::is_invocable;
25 using ::std::is_invocable_r;
31 #include <cras_cpp_common/external/invoke.hpp/invoke.hpp> 34 using ::cras::impl::invoke_hpp::invoke;
35 using ::cras::impl::invoke_hpp::invoke_result;
36 using ::cras::impl::invoke_hpp::invoke_result_t;
37 using ::cras::impl::invoke_hpp::is_invocable;
38 using ::cras::impl::invoke_hpp::is_invocable_r;
39 using ::cras::impl::invoke_hpp::apply;
44 #if defined(__cpp_lib_bind_front) && __cpp_lib_bind_front >= 201907L 47 template<
class F,
class...Args>
50 return [
f = ::std::forward<F>(
f), boundArgs = ::std::make_tuple(::std::forward<Args>(
args)...)](
auto&&... unboundArgs)
53 [&](
auto&&...
args) -> decltype(
auto) {
54 return ::cras::invoke(
f, decltype(
args)(
args)..., decltype(unboundArgs)(unboundArgs)...); },
auto bind_front(F &&f, Args &&... args)