Actions

icon Post
text/html Subscribe
text/html Unsubscribe

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

trivial __dynamic_cast fails?


  • To: cxx-abi-dev@xxxxxxxxxxxxxxxx
  • Subject: trivial __dynamic_cast fails?
  • From: David Baraff <deb@xxxxxxxxx>
  • Date: Fri, 27 Feb 2004 07:56:07 -0800

I'm playing around with the __cxxabiv1::__dynamic_cast() function.  It
works as I would expect, with one exception.

Suppose that Base and Derived are polymorphic, with Base a public base
class of Derived.
Given
   Derived* d = new Derived;
   Base* b = d;

I would like to be able to do

   void* result = __dynamic_cast(d, &typeid(Derived), &typeid(Base),
-1);

which means, literally, "try to cast this pointer of type Derived to
Base."  (And yes I have a good reason for wanting to do something that
appears that trivial.  This is in a context where all you will have to
work with are void*'s and type_info structures.  So the fact that you
are going in the "easy" direction for the cast doesn't help you any.).

Unfortunately, I always get NULL back -- it seems like the
__dynamic_cast() operator doesn't want to cast from a Derived to a
Base.  Am I doing anything wrong?  I can go the other direction just
fine.  I can't find any other functions in the API that'll do what I
want.


---------------
* I didn't really pass in &typeid(Derived),  I actually pass in a
          dynamic_cast<const __class_type_info*>(&typeid(Derived))
and similarly for Base.