Comment #0 by razvan.nitu1305 — 2018-07-26T11:20:08Z
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.
Comment #1 by razvan.nitu1305 — 2018-07-26T11:22:28Z
(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
Comment #2 by simen.kjaras — 2018-07-26T12:07:09Z
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).
Comment #3 by robert.schadek — 2024-12-13T18:59:52Z