https://gcc.gnu.org/bugzilla/show_bug.cgi?id=118324
Bug ID: 118324
Summary: Type deduction for class with deleted copy constructor
failed in lambda parameter
Product: gcc
Version: 15.0
Status: UNCONFIRMED
Severity: normal
Priority: P3
Component: c++
Assignee: unassigned at gcc dot gnu.org
Reporter: wangbopku15 at gmail dot com
Target Milestone: ---
Consider the following code:
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
struct A {
A(const A&) = delete;
};
void (*fptr)(A) = [](auto){};
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
GCC rejects it with a confusing diagnostic that complains about bad type
conversion:
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
<source>:5:19: error: cannot convert '<lambda(auto:1)>' to 'void (*)(A)' in
initialization
5 | void (*fptr)(A) = [](auto){};
| ^~~~~~~~~~
| |
| <lambda(auto:1)>
Compiler returned: 1
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
Note that the 'auto' parameter can be correctly deduced to 'A' if the copy ctor
of 'A' is not deleted.
EDG, clang, and ICC accept that:
https://godbolt.org/z/c87dn9GcG