Boost logo

Boost :

From: Jason House (jhouse_at_[hidden])
Date: 2003-01-22 11:55:06


Douglas Gregor wrote:
>
> > The pointer cast returns NULL on failure, the value cast throws
> > bad_any_cast.
>
> That wouldn't change. The only difference is that the existing semantics
> return a copy of the ValueType when the type is correct, and throws
> bad_any_cast on failure. The signature is:
>
> template<typename ValueType>
> ValueType any_cast(const any & operand);
>
> In many cases, it would be more useful to get an actual reference to the held
> value, so the folllowing signature(s) would be preferred:
>
> template<typename ValueType> ValueType& any_cast(any & operand);
> template<typename ValueType> const ValueType& any_cast(const any & operand);
>
> If "operand" does not contain a value of type ValueType, any_cast throws
> bad_any_cast. Otherwise, it returns a reference to the held value. Why
> wouldn't we want this behavior?

so, with the new scheme, if someone does a conversion to a pointer type
and it fails, what happens?
does it return Null or does it throw bad_any_cast?

If the old functionality of returning Null on a bad pointer cast
remains, and you simply can use either the pointer cast or the new
reference cast, why not go with the new system?

  I have to imagine that a one-liner dereferencing a NULL pointer has to
be a bit more dangerous than code that throws an exception. By the same
token, if the user prefers a non-exception and intends to test the
pointer, then so be it.


Boost list run by bdawes at acm.org, gregod at cs.rpi.edu, cpdaniel at pacbell.net, john at johnmaddock.co.uk