array of elements of various sybtypes

spir denis.spir at
Wed Jan 26 09:27:37 PST 2011


This fails:

class T0 {}
class T1 : T0 {}
class T2 : T0 {}

unittest {
     auto t1 = new T1();
     auto t2 = new T2();
     T0[] ts = [t1, t2];

Error: cannot implicitly convert expression (t1) of type __trials__.T0 to 
Error: cannot implicitly convert expression ([(__error),t2]) of type T2[] to T0[]

I guess it should be accepted due to explicite typing 'T0[]'. What do you 
think? D first determines the type of the last element (always the last one), 
here T2. Then, /ignoring/ the array's defined type, tries to cast other 
elements to the same type T2. It should instead, I guess, check all elements 
are compatible with the defined array type.
An additional enigma is why the failing element t1 is said to be of supertype 
T0 --which is also correct-- while it retained t2's exact type T2. ???

Anyway, is there a workaround?

vita es estrany

More information about the Digitalmars-d-learn mailing list