Boost logo

Boost :

From: Tom Widmer (tom_usenet_at_[hidden])
Date: 2004-03-08 05:27:26


On Sun, 7 Mar 2004 15:44:22 -0800, "Robert Ramey" <ramey_at_[hidden]>
wrote:

>>Robert Ramey wrote:
>>> This exchange illustrates the problem rather nicely. Its not clear
>>> to me from the name "aligned_storage" that its meant to do the same
>>> job as "stack_allocate" and in fact is easily confused with other
>>> boost functions. I've been able to find no documentation nor test
>>> nor other information. The only place its used is in variant.hpp but
>>> its not mentioned in the documentation of that either. There is no
>>> statement in the header itself as to what it does and the code is
>>> sufficiently non-trivial that it's not obvious what its supposed to
>>> do. The fact that it has a parameter than stack_allocate doesn't
>>> need also suggests that it's intended purpose is different from that
>>> of stack_allocate.
>
>The previous post referred to alignment_of rather than aligned_storage which
>seems to me to unrelated. Are they related in some non-obvious (to me) way?

aligned_storage can be (and in fact is) implemented in terms of
alignment_of and type_with_alignment. Even if you don't want to use
aligned_storage, since it isn't a full part of boost yet (it didn't
ship with the last release), you could use use type traits to
implement your own correct stack_allocate function. e.g.

template<class T>
struct stack_allocate {
    union {
      char a[sizeof(T)];
      type_with_alignment<alignment_of<T>::value>::type b;
    } mem;
    T * address(){
        void * vptr = &mem;
        return static_cast<T *>(vptr);
    }
    T & reference(){
        return * address();
    }
};

or something like that.

Tom

-- 
C++ FAQ: http://www.parashift.com/c++-faq-lite/
C FAQ: http://www.eskimo.com/~scs/C-faq/top.html

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