struct A { immutable(A) fun() { return immutable A(); } ref A fun2(ref A a) { return this; } alias fun this; // line 6 } void main() { A a, b; b.fun2(a); } aliasthisbug.d(12): Error: function aliasthisbug.A.fun2(ref A a) is not callable using argument types (A) aliasthisbug.d(12): cannot pass argument a of type A to parameter ref A a Comment line 6 an the error disappears.
(In reply to RazvanN from comment #0) > struct A > { > immutable(A) fun() { return immutable A(); } > ref A fun2(ref A a) { return this; } > > > alias fun this; // line 6 > } > > void main() > { > A a, b; > b.fun2(a); > } > > aliasthisbug.d(12): Error: function aliasthisbug.A.fun2(ref A a) is not > callable using argument types (A) > aliasthisbug.d(12): cannot pass argument a of type A to parameter ref > A a > > Comment line 6 an the error disappears. Also, changing the signature of fun2 to : ref A fun2(A a) makes the example compile
Further simplified: struct A { const(A) fun(); alias fun this; } void fun2(ref A a); unittest { A a; fun2(a); } This bug triggers when the alias this type is a qualified version of A (shared, const, or immutable), and A has no aliasing (pointers, dynamic arrays, AAs).
THIS ISSUE HAS BEEN MOVED TO GITHUB https://github.com/dlang/dmd/issues/19466 DO NOT COMMENT HERE ANYMORE, NOBODY WILL SEE IT, THIS ISSUE HAS BEEN MOVED TO GITHUB