// Delete F when we go out of scope:
std::unique_ptr<F> code(*reinterpret_cast<F**>(&buffer));
return (*code)(std::forward<Args>(args)...);
// Delete F when we go out of scope:
std::unique_ptr<F> code(*reinterpret_cast<F**>(&buffer));
return (*code)(std::forward<Args>(args)...);
operator bool() const { return vtable_ != nullptr; }
bool operator!() const { return vtable_ == nullptr; }
operator bool() const { return vtable_ != nullptr; }
bool operator!() const { return vtable_ == nullptr; }
F code_;
std::tuple<Args...> args_;
typedef decltype(simgrid::xbt::apply(std::move(code_), std::move(args_))) result_type;
F code_;
std::tuple<Args...> args_;
typedef decltype(simgrid::xbt::apply(std::move(code_), std::move(args_))) result_type;