In the first one, you are saying "I have a pointer, and I promise it's pointing at a der
, so please just go with it".1
In the second one, you can make no such promise, because you unambiguously have a base
, not a der
.
1. Of course, because it doesn't actually point at a
der
, you'll get undefined behaviour at runtime.