Comment #0 by razvan.nitu1305 — 2017-12-27T14:19:07Z
Consider the following example:
import core.stdc.stdio;
class A
{
void visit(int a){ printf("A - int\n");}
void visit(float b) { printf("A - float\n");}
}
mixin template Bmix(AST)
{
// move these 2 methods inside B without any modifications
override void visit(int a) {printf("B - int\n");}
override void visit(float b) {printf("B - float\n"); super.visit(b);}
}
class B : A!int
{
alias visit = A!int.visit;
mixin Bmix!int;
}
class C : B
{
alias visit = B.visit;
override void visit(float b)
{
printf("C - float\n");
super.visit(b);
}
}
void main()
{
C vis = new C();
float c = 7.0;
vis.visit(c);
}
Output:
C - float
A - float
Moving the visit methods from Bmix to B results in the following output:
C - float
B - float
A - float
I would expect that this is also the result in the first case.
Best regards,
RazvanN
Comment #1 by tim.dlang — 2022-03-12T13:39:34Z
*** Issue 22879 has been marked as a duplicate of this issue. ***
Comment #2 by robert.schadek — 2024-12-13T18:55:48Z