From: Michael Goldshteyn (mgoldshteyn_at_[hidden])
Date: 2005-03-23 17:42:39


"Jody Hagins" <jody-boost-011304_at_[hidden]> wrote in message
news:20050323172054.5743c220.jody-boost-011304_at_atdesk.com...

> Does that make sense, or just make it more confusing?!?

OK, now I understand where my confusion was coming from. I associated the
behavior of boost::any_cast with the way dynamic_cast works. Dynamic cast
uses:

dynamic_cast<Derived &>(base); // A bad_cast exception gets thrown if the
conversion is not possible
dynamic_cast<Derived *>(pBase); // A zero is returned if the conversion
fails

now, with any_cast:

any_cast<std::string>(myAny); // Throws bad_any_cast if not possible,
similar to dynamic_cast with references
any_cast<std::string>(&myAny); // Attempts to cast &myAny to a string
pointer, returning zero on failure.

The final example is what confused me, when I tried to relate it to
dynamic_cast. I think that the template argument is counterintuitive. Maybe
it should have been implemented as:

any_cast<std::string *>(&myAny); // Instead, in order to more resemble
dynamic_cast behavior with pointers

In any case, I now understand what it is doing. Perhaps this difference from
dynamic cast should be documented more explicitly.

Thanks,

Michael Goldshteyn