13template <
typename R,
typename... Args>
14class function_ref<R(Args...)> {
15 R (*call)(
void *fn, Args... args) =
nullptr;
19 function_ref(
const function_ref &) =
default;
23 requires std::is_invocable_r_v<R, F, Args...>
24 : fn(
const_cast<void *
>(
static_cast<const void *
>(&fn))) {
25 call = [](
void *fn, Args... args) -> R {
26 return (*
static_cast<std::remove_reference_t<F> *
>(fn))(
27 std::forward<Args>(args)...);
31 R operator()(Args... args)
const {
32 return call(fn, std::forward<Args>(args)...);