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
*** Issue 22879 has been marked as a duplicate of this issue. ***
THIS ISSUE HAS BEEN MOVED TO GITHUB https://github.com/dlang/dmd/issues/19355 DO NOT COMMENT HERE ANYMORE, NOBODY WILL SEE IT, THIS ISSUE HAS BEEN MOVED TO GITHUB