[Issue 18132] New: mixin template methods ignored in inheritance chain
d-bugmail at puremagic.com
d-bugmail at puremagic.com
Wed Dec 27 14:19:07 UTC 2017
https://issues.dlang.org/show_bug.cgi?id=18132
Issue ID: 18132
Summary: mixin template methods ignored in inheritance chain
Product: D
Version: D2
Hardware: x86_64
OS: All
Status: NEW
Severity: normal
Priority: P1
Component: dmd
Assignee: nobody at puremagic.com
Reporter: razvan.nitu1305 at gmail.com
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
--
More information about the Digitalmars-d-bugs
mailing list