[](TaskUnion& buffer, Args... args) -> R {
// Delete F when we go out of scope:
std::unique_ptr<F> code(*reinterpret_cast<F**>(&buffer));
[](TaskUnion& buffer, Args... args) -> R {
// Delete F when we go out of scope:
std::unique_ptr<F> code(*reinterpret_cast<F**>(&buffer));