www.digitalmars.com         C & C++   DMDScript  

digitalmars.D.bugs - [Issue 1225] New: Super Class method hides the global template from mixin

reply d-bugmail puremagic.com writes:
http://d.puremagic.com/issues/show_bug.cgi?id=1225

           Summary: Super Class method hides the global template from mixin
           Product: D
           Version: 1.014
          Platform: PC
        OS/Version: Windows
            Status: NEW
          Severity: normal
          Priority: P2
         Component: DMD
        AssignedTo: bugzilla digitalmars.com
        ReportedBy: davidl 126.com


import std.stdio;
template dup(T){
    T dup(){
    auto c=new T;
    foreach(i,x;T.tupleof)
    {
        c.tupleof[i]=x;
        writefln(`tupleof `,i);
    }
    return c;

    }
}
class baseclass
{
    mixin dup!(baseclass);
    void method(){printf("a.method\n");}
}
class deriveclass:baseclass
{
    mixin dup!(deriveclass);
    int j;
    void method(){printf("b.method\n");}
}
void main()
{
    deriveclass mybinstance = new deriveclass;
    mybinstance.dup;
}
compiler complains:
testclass.d(21): mixin dup isn't a template


-- 
May 09 2007
next sibling parent d-bugmail puremagic.com writes:
http://d.puremagic.com/issues/show_bug.cgi?id=1225


davidl 126.com changed:

           What    |Removed                     |Added
----------------------------------------------------------------------------
            Summary|Super Class method hides the|Super Class method hides the
                   |global template from mixin  |global template from mixin





This illustrate the bug a little more clearly, and also fix some issues of the
original code.
import std.stdio;
template dup(T){
    T dup(){
    auto c=new T;
    foreach(i,x;this.tupleof)
    {
        c.tupleof[i]=x;
        writefln(`tupleof `,x);
    }
    return c;

    }
}
class baseclass
{
//    mixin dup!(baseclass);           // comment this , the dup won't be
hidden anymore in the derive class
    void method(){printf("a.method\n");}
}
class deriveclass:baseclass
{
    mixin dup!(deriveclass);
    int j;
        float i;
    void method(){printf("b.method\n");}
        this()
        {
                i=34;
                j=10;
        }
}
void main()
{
    deriveclass mybinstance = new deriveclass;
    mybinstance.dup();
}


-- 
Sep 15 2007
prev sibling parent d-bugmail puremagic.com writes:
http://d.puremagic.com/issues/show_bug.cgi?id=1225






*** Bug 1527 has been marked as a duplicate of this bug. ***


-- 
Sep 23 2007