- #include <iostream> 
- #include <functional> 
-   
- struct my_f_params {  
-     double flag;  
-     std::function<double(double)> inter_auto; 
- }; 
-   
- double xrootf(double x, void * p) 
- { 
-     my_f_params * params = static_cast<my_f_params*>(p); 
-     return params->flag * params->inter_auto(x); 
- } 
-   
- auto new_f(double x){ 
-     return [x](double y) { 
-         return x * y; 
-     }; 
- } 
-   
- int main(int argc, char const *argv[]) 
- { 
-     my_f_params p; 
-     p.flag = 123.45; 
-     p.inter_auto = new_f(-0.5); 
-     std::cout << xrootf(+2, &p) << std::endl; 
-     return 0; 
- } 
				I2luY2x1ZGUgPGlvc3RyZWFtPgojaW5jbHVkZSA8ZnVuY3Rpb25hbD4KCnN0cnVjdCBteV9mX3BhcmFtcyB7IAogICAgZG91YmxlIGZsYWc7IAogICAgc3RkOjpmdW5jdGlvbjxkb3VibGUoZG91YmxlKT4gaW50ZXJfYXV0bzsKfTsKCmRvdWJsZSB4cm9vdGYoZG91YmxlIHgsIHZvaWQgKiBwKQp7CiAgICBteV9mX3BhcmFtcyAqIHBhcmFtcyA9IHN0YXRpY19jYXN0PG15X2ZfcGFyYW1zKj4ocCk7CiAgICByZXR1cm4gcGFyYW1zLT5mbGFnICogcGFyYW1zLT5pbnRlcl9hdXRvKHgpOwp9CgphdXRvIG5ld19mKGRvdWJsZSB4KXsKICAgIHJldHVybiBbeF0oZG91YmxlIHkpIHsKICAgICAgICByZXR1cm4geCAqIHk7CiAgICB9Owp9CgppbnQgbWFpbihpbnQgYXJnYywgY2hhciBjb25zdCAqYXJndltdKQp7CiAgICBteV9mX3BhcmFtcyBwOwogICAgcC5mbGFnID0gMTIzLjQ1OwogICAgcC5pbnRlcl9hdXRvID0gbmV3X2YoLTAuNSk7CiAgICBzdGQ6OmNvdXQgPDwgeHJvb3RmKCsyLCAmcCkgPDwgc3RkOjplbmRsOwogICAgcmV0dXJuIDA7Cn0=