Effects:
Equivalent to:
return call_wrapper(std::forward<F>(f));
where
call_wrapper is an exposition only class defined as follows:
class call_wrapper {
using FD = decay_t<F>;
FD fd;
explicit call_wrapper(F&& f);
public:
call_wrapper(call_wrapper&&) = default;
call_wrapper(const call_wrapper&) = default;
template<class... Args>
auto operator()(Args&&...) &
-> decltype(!declval<invoke_result_t<FD&, Args...>>());
template<class... Args>
auto operator()(Args&&...) const&
-> decltype(!declval<invoke_result_t<const FD&, Args...>>());
template<class... Args>
auto operator()(Args&&...) &&
-> decltype(!declval<invoke_result_t<FD, Args...>>());
template<class... Args>
auto operator()(Args&&...) const&&
-> decltype(!declval<invoke_result_t<const FD, Args...>>());
};