https://gcc.gnu.org/bugzilla/show_bug.cgi?id=80789
Bug ID: 80789 Summary: Better error for passing lambda with capture as function pointer Product: gcc Version: 8.0 Status: UNCONFIRMED Severity: normal Priority: P3 Component: c++ Assignee: unassigned at gcc dot gnu.org Reporter: denis.campredon at gmail dot com Target Milestone: --- With the following code: --------- void g(void (*)()); void f() { int x; g([x](){}); } ---------- gcc produce this error: -------- main.cpp: In function 'void f()': main.cpp:5:14: error: cannot convert 'f()::<lambda()>' to 'void (*)()' for argument '1' to 'void g(void (*)())' g([x](){}); -------- It is not clear why the lambda is not accepted since calling g with a lambda with no capture produce no error. A better error would say something like: 'cannot convert a lambda with capture to function pointer'. And maybe a hint telling to use a "std::function" instead. Regards, Denis