From 1f9e358abba5d658b66dab5eb6c665613224c035 Mon Sep 17 00:00:00 2001 From: Paolo Carlini Date: Sun, 16 Sep 2007 23:59:34 +0000 Subject: [PATCH] type_traits (aligned_storage): Implement in the neat and general way. 2007-09-16 Paolo Carlini Douglas Gregor * include/tr1_impl/type_traits (aligned_storage): Implement in the neat and general way. Co-Authored-By: Douglas Gregor From-SVN: r128532 --- libstdc++-v3/ChangeLog | 6 ++ libstdc++-v3/include/tr1_impl/type_traits | 70 ++--------------------- 2 files changed, 10 insertions(+), 66 deletions(-) diff --git a/libstdc++-v3/ChangeLog b/libstdc++-v3/ChangeLog index 575055ea692..ec140d4db6d 100644 --- a/libstdc++-v3/ChangeLog +++ b/libstdc++-v3/ChangeLog @@ -1,3 +1,9 @@ +2007-09-16 Paolo Carlini + Douglas Gregor + + * include/tr1_impl/type_traits (aligned_storage): Implement + in the neat and general way. + 2007-09-14 Benjamin Kosnik * include/parallel/base.h (__gnu_parallel::less): Add partial diff --git a/libstdc++-v3/include/tr1_impl/type_traits b/libstdc++-v3/include/tr1_impl/type_traits index 9035fafece3..4a31e8b00b3 100644 --- a/libstdc++-v3/include/tr1_impl/type_traits +++ b/libstdc++-v3/include/tr1_impl/type_traits @@ -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 - // struct aligned_storage - // { typedef char type[_Len] __attribute__((__aligned__(_Align))); } - // - // Temporary workaround, useful for Align up to 32: - template - struct aligned_storage { }; - - template - struct aligned_storage<_Len, 1> - { - union type - { - unsigned char __data[_Len]; - char __align __attribute__((__aligned__(1))); - }; - }; - - template - struct aligned_storage<_Len, 2> - { - union type - { - unsigned char __data[_Len]; - char __align __attribute__((__aligned__(2))); - }; - }; - - template - struct aligned_storage<_Len, 4> - { - union type - { - unsigned char __data[_Len]; - char __align __attribute__((__aligned__(4))); - }; - }; - - template - struct aligned_storage<_Len, 8> - { - union type - { - unsigned char __data[_Len]; - char __align __attribute__((__aligned__(8))); - }; - }; - - template - struct aligned_storage<_Len, 16> - { - union type - { - unsigned char __data[_Len]; - char __align __attribute__((__aligned__(16))); - }; - }; - - template - struct aligned_storage<_Len, 32> - { + template + struct aligned_storage + { union type { unsigned char __data[_Len]; - char __align __attribute__((__aligned__(32))); + struct __attribute__((__aligned__((_Align)))) { } __aligner; }; }; -- 2.30.2