Jonathan M Davis Wrote: > > Ok, then let us actually test that and show it is valid[1]: > > > > class A {} > > class B:A {} > > > > void main() { > > A[] a = new B[6]; > > a[0] = new A(); > > } > > > > 1. http://ideone.com/5sUZt > > > > I have shown that what I am talking about is valid for Arrays (a container) > > but not templates. The issues of actually implementing it is not related > > to what I was replying to. I introduced it as a benefit to forgetting type > > information in "generics." I was then told "Having a container of one type > > should not be castable to a container of another type." So I am pointing > > out we need to remove this feature from arrays right now! > > In Java, you can't use generics with arrays, so it's not an issue. > > But if the D code you give here compiles, then that's a bug and needs to be > reported. > > - Jonathan M Davis
Java you will see that it has no issue converting the container, but throws an exception if inserting the wrong type: http://ideone.com/EZRvn Ok, I see the point: class A {} class B:A { void fly() {} } void main() { B[] b = new B[6]; A[] a = b; a[0] = new A(); b[0].fly(); } http://ideone.com/rLiVL Which is why others were saying you could have B converted to a const container of A as this conversion is good for passing a container of B to a function that takes a container of A.