diff --git a/libstdc++-v3/ChangeLog b/libstdc++-v3/ChangeLog index 575055ea692d38a454e5d3de7eb14650a5dbf19e..ec140d4db6df36ab3f5858488cbbf8c5aa385d67 100644 --- a/libstdc++-v3/ChangeLog +++ b/libstdc++-v3/ChangeLog @@ -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 diff --git a/libstdc++-v3/include/tr1_impl/type_traits b/libstdc++-v3/include/tr1_impl/type_traits index 9035fafece374824a34cb0c515bd5378e96e9f4b..4a31e8b00b3355883f273e8460f63d232c53e176 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<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> - { - 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> - { + template<std::size_t _Len, std::size_t _Align> + struct aligned_storage + { union type { unsigned char __data[_Len]; - char __align __attribute__((__aligned__(32))); + struct __attribute__((__aligned__((_Align)))) { } __aligner; }; };