>Why is this information only obtainable at run-time?
With a sufficiently intelligent compiler, it's certainly possible to determine the dynamic type at compile-time provided you have access to all of the source (which I'm guessing is what you're thinking of, and what prompted the question). But that's an incredibly difficult feat, and the C++ standard doesn't cater to the status quo. We're talking about a compiler that borders on AI quality parsing algorithms. And that's without considering black boxes, which throw a very large and awkwardly shaped monkey wrench into the gears.

Is it possible to determine the dynamic type at compile-time for all cases? Possibly, but it would probably take someone a great deal smarter than I am to figure out how. And the result would be dreadfully slow.