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

Reply via email to