[Issue 17766] Wrong choice of generic mutable/const/immutable methods
d-bugmail at puremagic.com
d-bugmail at puremagic.com
Mon Oct 22 19:11:27 UTC 2018
https://issues.dlang.org/show_bug.cgi?id=17766
alexandru.ermicioi at gmail.com changed:
What |Removed |Added
----------------------------------------------------------------------------
CC| |alexandru.ermicioi at gmail.co
| |m
--- Comment #1 from alexandru.ermicioi at gmail.com ---
This is not the only case, here is another case of wrong selection:
----------------------
class Mquartz(T, Z) {
Z pass(T component) const {
"Mutable pass".writeln;
return component.z;
}
const(Z) pass(const T component) const {
"Const pass".writeln;
return component.z;
}
const(Z) pass(immutable T component) const {
"Immutable pass".writeln;
return component.z;
}
const(Z) pass(inout T component) const {
"Inout pass".writeln;
return component.z;
}
}
struct V {
int z;
}
void main() {
auto m = new Mquartz!(V, typeof(V.z));
// V v = V(21);
// writeln(m.pass(v));
writeln(m.pass(V(20)));
writeln(m.pass(const(V)(20)));
writeln(m.pass(immutable(V)(20)));
writeln(m.pass(inout(V)(20)));
}
-------------------------
Current logic will select only const version with const argument instead of
selecting right ones:
-------------------------
Const pass
20
Const pass
20
Const pass
20
Const pass
20
-------------------------
The overload selection logic works as expected only if m is const, then
response will as expected:
-------------------------
Mutable pass
20
Const pass
20
Immutable pass
20
Inout pass
20
-------------------------
--
More information about the Digitalmars-d-bugs
mailing list