Interfaces are NOT compatible to Object. interface I{ void func(); } class C : I { void func(){} } void main(){ I i = new C; i.func(); // OK i.toHash(); // error !! (cast(C)i).toHash(); // OK (cast(Object)i).toHash(); // OK } I think this is a failure in the language design. What do you think?