Boost logo

Boost :

Subject: [boost] [aligned storage] support for empty storage
From: Thorsten Ottosen (thorsten.ottosen_at_[hidden])
Date: 2009-04-20 16:41:45


Hi all,

Currently the following fails:

   typedef boost::aligned_storage< 0, 4u > storage;
   storage s;

because this will try to create an empty array.

Does anybody have anything against adding the following
specialization:

template< std::size_t alignment_ >
struct aligned_storage_imp<0u,alignment_>
{
     /* intentionally empty */
};

Also, I would like to derive from aligned_storage_imp to get
the EBO:

template <
       std::size_t size_
     , std::size_t alignment_ = std::size_t(-1)
>
class aligned_storage : private
detail::aligned_storage::aligned_storage_imp<size_, alignment_>
{ ... }

The above changes enable the following program

   typedef boost::aligned_storage< 0, 4u > storage;

   struct simple : storage
   {
     int i;
   };

   #include <iostream>

   int main()
   {
       std::cout << sizeof(storage) << " " << sizeof(simple);
   }

to output "1 4" instead of "1 8" on gcc.

In case your are wondering, then I need this functionality in
boost::auto_buffer to get rid of the extra word when the stack-buffer
is empty (thus making auto_buffer as small as vector).

Comments?

-Thorsten


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