On Tue, 22 Apr 2014 11:19:57 -0400, Andre <an...@s-e-a-p.de> wrote:

Hi,

I just stumbled about this issue with array of interface. I want
to pass several objects (C and D) which shares the same interface A.
It seems somehow cumbersome that it only works if there is a cast on
the first element of the array.

interface A{}

class B: A{}

class C: B{};
class D: B{};

void main()
{
        //A[] arr = [new C(), new D()]; // Does not work
        A[] arr = [cast(A) new C(), new D()]; // Does work
}

Is the cast really needed?

At this point, yes. This is because the expression [new C(), new D()] does not take into account what you are assigning to (IMO it should).

The compiler will use the most derived type possible that all the elements implicitly cast to. In this case, it will be a B[].

-Steve

Reply via email to