Hey, How about forbidding this: void foo(Monkey* m) { Monkey* m2 = cast(Monkey*) m; } Pointer casts are potentially nasty when refactoring and the needless ones are easy for the compiler to detect, and probably no-one will find objections to this change. Just an easy win, isn't it? (not going to write a DIP for this...)