Boost logo

Boost Users :

Subject: Re: [Boost-users] [fusion] memory layout of fusion::vector vs boost::tuple/boost::array
From: Joel de Guzman (joel_at_[hidden])
Date: 2010-10-08 20:57:24


On 10/9/2010 2:44 AM, alfC wrote:
>
>
> On Oct 6, 5:33 pm, Joel de Guzman<j..._at_[hidden]> wrote:
>> On 10/7/2010 3:53 AM, alfC wrote:
>>
>>> Hi,
>>
>>> I am trying to convert a boost::array into a fusion::vector.
>>> reinterpreting the memory from boost::array. It works for tuples but
>>> not fusion::vector, why is that. Is there a way to make it work? ( I
>>> was hoping that the memory layout is the same to make conversion from
>>> one to the other very easy.)
>>
>> Don't do that. It will *never* be guaranteed to work even if it works
>> now. The memory layout of fusion::vector is an internal implementation
>> detail and can change anytime.
>
> The question is: is it guaranteed for boost::tuples<double,
> double, ...>?
> (it seems so, just by the PODness of tuples of PODs in its stated
> design.) If so, then it is a *feature* of boost::tuple.

No it is not. 1) It is not documented 2) It is not a POD
3) Anything with a reinterpret_cast is not guaranteed to work
(you can only rely on reinterpret_cast only when casting
back from a lost type e.g. through type erasure).

Disregarding any of that is playing with fire.

Regards,

-- 
Joel de Guzman
http://www.boostpro.com
http://spirit.sf.net

Boost-users list run by williamkempf at hotmail.com, kalb at libertysoft.com, bjorn.karlsson at readsoft.com, gregod at cs.rpi.edu, wekempf at cox.net