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.