The compiler rejects this: class Base {} class Derived : Base {} void main() { Base* basePtr; Derived* derivedPtr; basePtr = derivedPtr; // ERROR } Is that really correct that it shouldn't be allowed?