[Issue 23994] New: Compiler fails to derive lambda to be const
d-bugmail at puremagic.com
d-bugmail at puremagic.com
Thu Jun 15 17:12:07 UTC 2023
https://issues.dlang.org/show_bug.cgi?id=23994
Issue ID: 23994
Summary: Compiler fails to derive lambda to be const
Product: D
Version: D2
Hardware: All
OS: All
Status: NEW
Severity: normal
Priority: P1
Component: dmd
Assignee: nobody at puremagic.com
Reporter: andrej.mitrovich at gmail.com
DMD 2.102.0
-----
module test;
void call(void delegate(int i) const cb) {
cb(42);
}
struct C {
void callback(int i) const { }
}
void main() {
C c;
call(some_int => c.callback(some_int));
}
-----
$ dmd test.d
> test.d(13): Error: function `test.call(void delegate(int i) const cb)` is not callable using argument types `(void)
> test.d(13): cannot pass argument `__lambda2` of type `void` to parameter `void delegate(int i) const cb`
Commenting out `const` from both the parameter and the ballback function fixes
the issue.
Another workaround is to explicitly specify the callback type at the call site:
-----
// Works with `const` with the example above
call((int some_int) const => c.callback(some_int));
-----
But the compiler should be able to derive this on its own.
This workaround also works, where the type is omitted:
-----
call((some_int) const => c.callback(some_int));
-----
--
More information about the Digitalmars-d-bugs
mailing list