Reply to luke,
> What about casting an interface to another?
>
> Like:
>
> interface A{}
> interface B: A{}
> class C : B{}
> B Factory()
> {
> return new C();
> }
> auto i = cast(A)Factory();
>
> Could this work?
>
casting interfaces works fine, the compiler handles all the magic, however
a function that returns the wrong type subverts this.