Re: dynamic_cast does not work as specified
On Mon, 12 Jan 2009 13:01:26 -0500, Joseph M. Newcomer
<newcomer@flounder.com> wrote:
Yes, but I'm not using multiple inheritance. So I wasn't worried about the
multiple-inheritance case.
I always thought it interesting that dynamic_cast has to be able to cruise
up and down the inheritance graph and sort of go sideways in MI cases
searching for a match at runtime. As for defining the operator clearly and
rigorously, that's fairly hard to do. The C++ Standard takes a full page to
do it, 1.5 pages with examples. You're interested in the "run-time check"
aspect, and this is what it says:
5.2.7 Dynamic cast
<q>
8. The run-time check logically executes as follows:
? If, in the most derived object pointed (referred) to by v, v points
(refers) to a public base class subobject
of a T object, and if only one object of type T is derived from the
sub-object pointed (referred) to
by v, the result is a pointer (an lvalue referring) to that T object.
? Otherwise, if v points (refers) to a public base class sub-object of the
most derived object, and the
type of the most derived object has a base class, of type T, that is
unambiguous and public, the result
is a pointer (an lvalue referring) to the T sub-object of the most derived
object.
? Otherwise, the run-time check fails.
</q>
Note that this is paragraph 8. There are 7 before it. :) Importantly, for
(8) to apply, v (the operand of the cast) has to be a pointer or reference
to a polymorphic type, i.e. a type that has a virtual function.
--
Doug Harrison
Visual C++ MVP