On Saturday, 9 January 2021 at 20:00:35 UTC, Jacob Carlborg wrote:
On 2021-01-09 19:16, Q. Schroll wrote:
Say I have a class hierarchy like this:
   class Base { }
   class Derived : Base { }
A Derived object cannot be referenced as a Base object, but as a const(Base) object. That makes sense to me.

It can:

Base b = new Derived();

That's not what I mean. You copy the reference. That's not what referencing meant.

  Derived d = new Derived();
  Base* bp = &d; // fails
  const(Base) cbp = &d; // compiles.

Is there a reason all you're examples are using pointers?

Yes. Actually, I need it for slices, but only pointer part of it really mattered.

A Derived[] is implicitly a const(Base)[], not a Base[].
A void delegate() @safe[] is implicitly a const(void delegate())[]. But it seems a void function() @safe[] **isn't** implicitly a const(void function())[].

Functions taking those are kind of useless like that.

Reply via email to