On Wednesday, September 29, 2010 16:19:48 Jesse Phillips wrote: > 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
Ah, okay. That's true: the fact that you can't have generic arrays doesn't stop you from pointing an array reference of one type at another with a derived type. I would have thought that it would disallow that though. Well, Java is much bigger on runtime checks than compile-time checks. > 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. Exactly.