Does it make sense to talk about dynamic/static types with pointers in an
inheritance chain without virtual functions. You can still upcast/downcast.
Also, is it safe to say the static type is the pointer type you specify at
compile time, and the dynamic type is the type actualy pointed to---they may
be the same in the case A* a = new A();