$include_dir="/home/hyper-archives/boost/include"; include("$include_dir/msg-header.inc") ?>
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