fork download
  1. #include <functional>
  2.  
  3.  
  4. std::function<void()> s_capture_void_int;
  5. void capture_void_int (const std::function<void(int)>& param)
  6. {
  7. s_capture_void_int = [param]() {
  8. param(1);
  9. };
  10. }
  11. void capture_local_lambda()
  12. {
  13. auto local_lambda = [](int) {
  14. };
  15. s_capture_void_int = [local_lambda]() {
  16. local_lambda(1);
  17. };
  18. }
  19.  
  20. int main() {
  21. //Case 1: this works
  22. auto func2 = [](int){};
  23. {
  24. std::function<void(int)> func2_fn(func2);
  25. s_capture_void_int = [func2_fn]() { func2_fn(1); };
  26. }
  27. s_capture_void_int();
  28.  
  29. //case 2: even this works.
  30. capture_local_lambda();
  31. s_capture_void_int();
  32.  
  33. //case 3: but this fails.
  34. auto func3 = [](int){};
  35. {
  36. std::function<void(int)> func3_fn(func3);
  37. capture_void_int(func3_fn);
  38. }
  39. s_capture_void_int(); //<- it crashes here
  40. return 0;
  41. }
Success #stdin #stdout 0s 3472KB
stdin
Standard input is empty
stdout
Standard output is empty