On Saturday, 20 April 2013 at 14:56:25 UTC, Namespace wrote:
Why can D implicitly cast from the subclass to the base class, but not implicitly from the subclasse pointer to the base class pointer?

This works: http://dpaste.1azy.net/30dd34a0
This not: http://dpaste.1azy.net/ffacfd83

Makes not much sense for me.

a pointer to class in D is actually a pointer to a pointer as classes are reference types. Polymorphism for pointers to pointers to objects is not allowed. Consider this (ported from here https://groups.google.com/forum/?fromgroups=#!topic/comp.lang.c++/kNZ-ksORPwU):

class Base
{
    void doBaseThings();
}

class Dirv
{
    doDirvThings();
}

void AssignNewBaseTo(Base* basePtr)
{
        *basePtr = new Base;
}

void Oops()
{
        Dirv dirv;
        AssignNewBaseTo(&dirv);
dirv.doDirvThings(); // runtime crash -- a Base object // being asked to do Dirv things.
}

Reply via email to