- #include <functional> 
- #include <iostream> 
-   
- template <typename VAL, typename RET, typename ...ARGS> 
- struct wrapper_helper 
- { 
-  static std::function<RET(ARGS...)> wrapper(VAL v) 
-  { 
-    return [&](ARGS...args) -> RET { return v(args...); }; 
-  } 
- }; 
-   
- template <typename VAL, typename ...ARGS>  
- struct wrapper_helper<VAL,void,ARGS...> 
- { 
-  static std::function<void(ARGS...)> wrapper(VAL v) 
-  { 
-    return [&](ARGS...args) -> void { v(args...); }; 
-  } 
- }; 
-   
- void print_n(int n){ 
- 	std::cout << n << std::endl; 
- } 
-   
- int main() 
- {	 
- 	wrapper_helper<void(int),void,int>::wrapper(print_n)(10); 
- 	return 0; 
- } 
				I2luY2x1ZGUgPGZ1bmN0aW9uYWw+CiNpbmNsdWRlIDxpb3N0cmVhbT4KCnRlbXBsYXRlIDx0eXBlbmFtZSBWQUwsIHR5cGVuYW1lIFJFVCwgdHlwZW5hbWUgLi4uQVJHUz4Kc3RydWN0IHdyYXBwZXJfaGVscGVyCnsKIHN0YXRpYyBzdGQ6OmZ1bmN0aW9uPFJFVChBUkdTLi4uKT4gd3JhcHBlcihWQUwgdikKIHsKICAgcmV0dXJuIFsmXShBUkdTLi4uYXJncykgLT4gUkVUIHsgcmV0dXJuIHYoYXJncy4uLik7IH07CiB9Cn07Cgp0ZW1wbGF0ZSA8dHlwZW5hbWUgVkFMLCB0eXBlbmFtZSAuLi5BUkdTPiAKc3RydWN0IHdyYXBwZXJfaGVscGVyPFZBTCx2b2lkLEFSR1MuLi4+CnsKIHN0YXRpYyBzdGQ6OmZ1bmN0aW9uPHZvaWQoQVJHUy4uLik+IHdyYXBwZXIoVkFMIHYpCiB7CiAgIHJldHVybiBbJl0oQVJHUy4uLmFyZ3MpIC0+IHZvaWQgeyB2KGFyZ3MuLi4pOyB9OwogfQp9OwoKdm9pZCBwcmludF9uKGludCBuKXsKCXN0ZDo6Y291dCA8PCBuIDw8IHN0ZDo6ZW5kbDsKfQoKaW50IG1haW4oKQp7CQoJd3JhcHBlcl9oZWxwZXI8dm9pZChpbnQpLHZvaWQsaW50Pjo6d3JhcHBlcihwcmludF9uKSgxMCk7CglyZXR1cm4gMDsKfQ==