[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