www.digitalmars.com         C & C++   DMDScript  

digitalmars.D.bugs - [Issue 18132] New: mixin template methods ignored in inheritance chain

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 puremagic.com
          Reporter: razvan.nitu1305 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

--
Dec 27 2017