[Issue 23274] New: [REG2.099] Wrong call resolution (ambiguity) with const and non-const methods
d-bugmail at puremagic.com
d-bugmail at puremagic.com
Fri Jul 29 23:16:27 UTC 2022
https://issues.dlang.org/show_bug.cgi?id=23274
Issue ID: 23274
Summary: [REG2.099] Wrong call resolution (ambiguity) with
const and non-const methods
Product: D
Version: D2
Hardware: All
OS: All
Status: NEW
Severity: regression
Priority: P1
Component: dmd
Assignee: nobody at puremagic.com
Reporter: johanengelen at weka.io
Testcase:
```
struct A {
void foo(int delegate(int)) { }
void foo(int delegate(int) nothrow) const { } // const
void bug() {
foo( delegate int(int k) { return 1;} );
}
}
```
Compilation with dlang2.098 succeeds.
Compilation with dlang2.099 errors with:
```
<source>(7): Error: `example.A.foo` called with argument types `(int
delegate(int k) pure nothrow @nogc @safe)` matches both:
<source>(2): `example.A.foo(int delegate(int) _param_0)`
and:
<source>(4): `example.A.foo(int delegate(int) nothrow _param_0) const`
```
Because `bug` is not const, I would expect that only the non-const `foo` is a
candidate. If `nothrow` is removed, indeed that is what is called.
Note: replacing `delegate` with `function` errors on all compilers at least
back to dlang2.071.
--
More information about the Digitalmars-d-bugs
mailing list