- #include <iostream> 
- #include <functional> 
- #include <utility> 
-   
- struct Foo { 
-     template <typename Function, typename... Args> 
-     Foo(Function&& func, Args&&... args) { 
-         auto f = std::bind(std::forward<Function>(func), std::forward<Args>(args)...); 
-         func_ = [f] { f(); }; 
-     } 
-     void evaluate() { func_(); } 
-     std::function<void()> func_; 
- }; 
-   
- void printValues(int x, double y, const char* charArr) { 
-     std::cout << x << " " << y << " " << charArr << std::endl; 
- } 
-   
- int main() { 
-     Foo f(printValues, 5, 2.0, "Test"); 
-     f.evaluate(); 
- } 
				I2luY2x1ZGUgPGlvc3RyZWFtPgojaW5jbHVkZSA8ZnVuY3Rpb25hbD4KI2luY2x1ZGUgPHV0aWxpdHk+CgpzdHJ1Y3QgRm9vIHsKICAgIHRlbXBsYXRlIDx0eXBlbmFtZSBGdW5jdGlvbiwgdHlwZW5hbWUuLi4gQXJncz4KICAgIEZvbyhGdW5jdGlvbiYmIGZ1bmMsIEFyZ3MmJi4uLiBhcmdzKSB7CiAgICAgICAgYXV0byBmID0gc3RkOjpiaW5kKHN0ZDo6Zm9yd2FyZDxGdW5jdGlvbj4oZnVuYyksIHN0ZDo6Zm9yd2FyZDxBcmdzPihhcmdzKS4uLik7CiAgICAgICAgZnVuY18gPSBbZl0geyBmKCk7IH07CiAgICB9CiAgICB2b2lkIGV2YWx1YXRlKCkgeyBmdW5jXygpOyB9CiAgICBzdGQ6OmZ1bmN0aW9uPHZvaWQoKT4gZnVuY187Cn07Cgp2b2lkIHByaW50VmFsdWVzKGludCB4LCBkb3VibGUgeSwgY29uc3QgY2hhciogY2hhckFycikgewogICAgc3RkOjpjb3V0IDw8IHggPDwgIiAiIDw8IHkgPDwgIiAiIDw8IGNoYXJBcnIgPDwgc3RkOjplbmRsOwp9CgppbnQgbWFpbigpIHsKICAgIEZvbyBmKHByaW50VmFsdWVzLCA1LCAyLjAsICJUZXN0Iik7CiAgICBmLmV2YWx1YXRlKCk7Cn0=