Boost logo

Boost :

Subject: Re: [boost] [numeric_cast] request for boost::numeric_downcast
From: David Abrahams (dave_at_[hidden])
Date: 2008-11-11 02:41:17


on Thu Nov 06 2008, Fernando Cacciola <fernando.cacciola-AT-gmail.com> wrote:

> Hi Thorsten,
>> Hi Fernando,
>>
>> Amoung our utilities we have
>>
>> boost::polymorphic_cast
>> boost::polymorphic_downcast
>>
>> The latter only performs a check in debug builds, and can then be used whenever the
>> cast must succeed.
>>
> Oh... I wasn't aware of _downcast.
>
>> boost::numeric_cast has no such alternative. Therefore I wuold like to see one. To
>> keep in the naming convention from above, I think it could be reasonable to call
>> this
>>
>> boost::numeric_downcast
>>
>> Furthermore, this should if possible be implemented in a seperate header (which is
>> included in the main header) that can be compiled without exception-support. I think
>> there are still platforms where they need this functionality, but don't want to sue
>> exceptions.
>>
> Indeed.. it all makes sense.

Not to me. In what sense is this proposed cast "down?"

The point of boost::polymorphic_downcast is that it can be used for
casting down the inheritance hierarchy, to more-derived classes. It
cannot, however, be used for cross-casts as polymorphic_cast can.

boost::polymorphic_downcast is meant to be used where you think you
really know what derived type you've got, and you want an assertion to
reinforce your reasoning with a runtime check. I suppose you can have a
similar situation for numeric types (e.g. "I know this long int should
fit in a short int").

How about boost::checked_cast, or boost::checked_narrowing_cast or
boost::narrow_cast?

-- 
Dave Abrahams
BoostPro Computing
http://www.boostpro.com

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