You signed in with another tab or window. Reload to refresh your session.You signed out in another tab or window. Reload to refresh your session.You switched accounts on another tab or window. Reload to refresh your session.Dismiss alert
alexandru.ermicioi commented on 2018-10-22T19:11:27Z
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
-------------------------
Илья Ярошенко reported this on 2017-08-20T05:19:27Z
Transferred from https://issues.dlang.org/show_bug.cgi?id=17766
CC List
Description
static struct Foo() { char opIndex(Indexes...)(Indexes indexes) immutable { return 'i'; } char opIndex()() const { return 'c'; } char opIndex(Indexes...)(Indexes indexes) { return 'm'; } } pragma(msg, Foo!()()[]); pragma(msg, (cast(const) Foo!()())[]); pragma(msg, (cast(immutable) Foo!()())[]); Prints 'c' 'c' 'c' But shuold be 'm' 'c' 'i' Type qualifier should have priority.The text was updated successfully, but these errors were encountered: