c++ - c++11 lambda high-order function wrapper recursive error -


#include <iostream> #include <functional> using namespace std;  function<int(int)> wrapper(function<void(int)> f) {     auto ff = [&](int a) {         cout << "in wrapper " << << endl;         f(a);         return 1;     };     return ff; }  int main() {     auto fa = wrapper([](int a){         cout << "in fa " << << endl;     });     fa(999);     wrapper([&fa](int b){         cout << "in anon " << b << endl;         fa(998);     })(997); } 

the above code print

in wrapper 999 in fa 999 in wrapper 997 in anon 997 in wrapper 998                                                                                                                                                   in anon 998                                                                                                                                                      in wrapper 998                                                                                                                                                   in anon 998                                                                                                                                                      in wrapper 998                                                                                                                                                   in anon 998                                                                                                                                                      in wrapper 998                                                                                                                                                   in anon 998                                                                                                                                                      in wrapper 998                                                                                                                                                   in anon 998                                                                                                                                                      in wrapper 998                                                                                                                                                   in anon 998                                                                                                                                                      .......... 

until segmentation fault.

i write same code in javascript

function  wrapper(f) {     var ff = function(a) {         console.log("in wrapper %s", a);         f(a);         return 1;     };     return ff; }  (function () {     var fa = wrapper(function(a){         console.log("in fa %s", a);     });     fa(999);     wrapper(function(b){         console.log("in anon %s", b);         fa(998);     })(997); })(); 

it print

in wrapper 999 in fa 999 in wrapper 997 in anon 997 in wrapper 998 in fa 998 

what's c++ lambda code? tried g++-5.0 , g++4.9 compiler. ended error.

ff captures f reference, f local wrapper. when return ff, reference becomes dangling, , undefined behaviour triggered upon calling ff.


Comments