Thread overview
Generic Inner Class Inheritance
Nov 02, 2005
Garett Bass
Nov 05, 2005
Walter Bright
Nov 07, 2005
Thomas Kuehne
November 02, 2005
Under DMD 0.136 and 0.137, generic inner classes cannot inherit from abstract inner classes.  Is this the intended behavior?

class Outer {
    int x;

    abstract class AbstractInner {
        void f();
    }

    class GenericInner(T) : AbstractInner {
        T t;
        void f() { writefln("GenericInner.f()"); x = 2; }
    }
    class ConcreteInner : AbstractInner {
        void f() { writefln("ConcreteInner.f()"); x = 2; }
    }

    this() {
        auto AbstractInner g = new GenericInner!(int)(); // Error
        auto AbstractInner c = new ConcreteInner();      // Ok
    }
}

Error message: "class main.Outer.GenericInner!(int).GenericInner
super class Abstract Inner is nested within Outer, not
GenericInner!(int)

Regards,
Garett


November 05, 2005
Looks like a compiler bug.


November 07, 2005
Garett Bass schrieb am 2005-11-02:
> Under DMD 0.136 and 0.137, generic inner classes cannot inherit from abstract inner classes.  Is this the intended behavior?
>
> class Outer {
>     int x;
>
>     abstract class AbstractInner {
>         void f();
>     }
>
>     class GenericInner(T) : AbstractInner {
>         T t;
>         void f() { writefln("GenericInner.f()"); x = 2; }
>     }
>     class ConcreteInner : AbstractInner {
>         void f() { writefln("ConcreteInner.f()"); x = 2; }
>     }
>
>     this() {
>         auto AbstractInner g = new GenericInner!(int)(); // Error
>         auto AbstractInner c = new ConcreteInner();      // Ok
>     }
> }
>
> Error message: "class main.Outer.GenericInner!(int).GenericInner
> super class Abstract Inner is nested within Outer, not
> GenericInner!(int)
>

Added to DStress as http://dstress.kuehne.cn/run/t/template_class_12_A.d http://dstress.kuehne.cn/run/t/template_class_12_B.d

Thomas