#include <iostream>
#include <functional>
using namespace std;
template<typename... T>
void f(T... a)
{
std::initializer_list<int> {(std::cout<<a<<" ", 0)...};
}
template<typename... T>
class Defer
{
private:
std::function<void()> func;
public:
Defer(T... a) : func(std::bind(f<T...>, a...)) {}
void call() {func();}
};
int main()
{
Defer<int, float, int, const char*> d(1, 1.1, 2, "Hey");
d.call();
return 0;
}
I2luY2x1ZGUgPGlvc3RyZWFtPgojaW5jbHVkZSA8ZnVuY3Rpb25hbD4KCnVzaW5nIG5hbWVzcGFjZSBzdGQ7Cgp0ZW1wbGF0ZTx0eXBlbmFtZS4uLiBUPgp2b2lkIGYoVC4uLiBhKQp7CglzdGQ6OmluaXRpYWxpemVyX2xpc3Q8aW50PiB7KHN0ZDo6Y291dDw8YTw8IiAiLCAwKS4uLn07Cn0KCnRlbXBsYXRlPHR5cGVuYW1lLi4uIFQ+CmNsYXNzIERlZmVyCnsKCXByaXZhdGU6CgkJc3RkOjpmdW5jdGlvbjx2b2lkKCk+IGZ1bmM7CgoJcHVibGljOgoJCURlZmVyKFQuLi4gYSkgOiBmdW5jKHN0ZDo6YmluZChmPFQuLi4+LCBhLi4uKSkge30KCQl2b2lkIGNhbGwoKSB7ZnVuYygpO30KfTsKCgoKaW50IG1haW4oKQp7CglEZWZlcjxpbnQsIGZsb2F0LCBpbnQsIGNvbnN0IGNoYXIqPiBkKDEsIDEuMSwgMiwgIkhleSIpOwoJZC5jYWxsKCk7CglyZXR1cm4gMDsKfQo=