type_traits (aligned_storage): Implement in the neat and general way.

2007-09-16  Paolo Carlini  <pcarlini@suse.de>
	    Douglas Gregor  <doug.gregor@gmail.com>

	* include/tr1_impl/type_traits (aligned_storage): Implement
	in the neat and general way.

Co-Authored-By: Douglas Gregor <doug.gregor@gmail.com>

From-SVN: r128532
This commit is contained in:
Paolo Carlini 2007-09-16 23:59:34 +00:00 committed by Paolo Carlini
parent 57711cd1b3
commit 1f9e358abb
2 changed files with 10 additions and 66 deletions

View File

@ -1,3 +1,9 @@
2007-09-16 Paolo Carlini <pcarlini@suse.de>
Douglas Gregor <doug.gregor@gmail.com>
* include/tr1_impl/type_traits (aligned_storage): Implement
in the neat and general way.
2007-09-14 Benjamin Kosnik <bkoz@redhat.com>
* include/parallel/base.h (__gnu_parallel::less<Tp>): Add partial

View File

@ -375,75 +375,13 @@ _GLIBCXX_BEGIN_NAMESPACE_TR1
{ typedef typename remove_reference<_Tp>::type* type; };
/// @brief other transformations [4.8].
// Due to c++/19163 and c++/17743, for the time being we cannot use
// the correct, neat implementation :-(
//
// template<std::size_t _Len, std::size_t _Align>
// struct aligned_storage
// { typedef char type[_Len] __attribute__((__aligned__(_Align))); }
//
// Temporary workaround, useful for Align up to 32:
template<std::size_t, std::size_t>
struct aligned_storage { };
template<std::size_t _Len>
struct aligned_storage<_Len, 1>
{
template<std::size_t _Len, std::size_t _Align>
struct aligned_storage
{
union type
{
unsigned char __data[_Len];
char __align __attribute__((__aligned__(1)));
};
};
template<std::size_t _Len>
struct aligned_storage<_Len, 2>
{
union type
{
unsigned char __data[_Len];
char __align __attribute__((__aligned__(2)));
};
};
template<std::size_t _Len>
struct aligned_storage<_Len, 4>
{
union type
{
unsigned char __data[_Len];
char __align __attribute__((__aligned__(4)));
};
};
template<std::size_t _Len>
struct aligned_storage<_Len, 8>
{
union type
{
unsigned char __data[_Len];
char __align __attribute__((__aligned__(8)));
};
};
template<std::size_t _Len>
struct aligned_storage<_Len, 16>
{
union type
{
unsigned char __data[_Len];
char __align __attribute__((__aligned__(16)));
};
};
template<std::size_t _Len>
struct aligned_storage<_Len, 32>
{
union type
{
unsigned char __data[_Len];
char __align __attribute__((__aligned__(32)));
struct __attribute__((__aligned__((_Align)))) { } __aligner;
};
};