Boost logo

Boost :

Subject: Re: [boost] Proposed templated integer_sort
From: Giovanni Piero Deretta (gpderetta_at_[hidden])
Date: 2008-12-16 10:19:52


On Tue, Dec 16, 2008 at 3:03 PM, Pyry Jahkola <pyry.jahkola_at_[hidden]> wrote:
> Gevorg Voskanyan wrote:
>>
>> I suggest modifying CastFloatIter() function to use memcpy for accessing
>> floats as integers, as shown below:
>
> Hmm, I don't think it's any better than reinterpret casting.

Yes it is. It has the nice property of not leading to UB. And the
result is well defined (the bitwise representation of the source is
copied into the destination).

> (It actually does
> the reinterpret cast when converting float const * to void const *...)

Not really.

>I'd
> suggest using a union instead, for the purpose of treating a float as
> integer:
>
> template <typename To, typename From>
> inline To bitwise_cast(From const & from) {
> BOOST_STATIC_ASSERT(sizeof(To) == sizeof(From));
> union { To to; From from; } u;
> u.from = from;
> return u.to;
> }
>

This is also undefined behavior even if it is explicitly supported by
most compilers as an extension. It is not necessarily better than a
memcpy and might actually be slower.

-- 
gpd

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