diff options
Diffstat (limited to 'libstdc++-v3/include/std/type_traits')
-rw-r--r-- | libstdc++-v3/include/std/type_traits | 30 |
1 files changed, 26 insertions, 4 deletions
diff --git a/libstdc++-v3/include/std/type_traits b/libstdc++-v3/include/std/type_traits index df5bbbb0b20..38c92abf6e8 100644 --- a/libstdc++-v3/include/std/type_traits +++ b/libstdc++-v3/include/std/type_traits @@ -240,7 +240,8 @@ namespace std { // "An imaginary lvalue of type From...". static const bool __value = (__is_convertible_simple<typename - add_reference<_From>::type, _To>::__value); + add_lvalue_reference<_From>::type, + _To>::__value); }; template<typename _From, typename _To> @@ -257,6 +258,27 @@ namespace std __is_convertible_helper<_From, _To>::__value> { }; + template<std::size_t _Len> + struct __aligned_storage_msa + { + union __type + { + unsigned char __data[_Len]; + struct __attribute__((__aligned__)) { } __align; + }; + }; + + template<std::size_t _Len, std::size_t _Align = + __alignof__(typename __aligned_storage_msa<_Len>::__type)> + struct aligned_storage + { + union type + { + unsigned char __data[_Len]; + struct __attribute__((__aligned__((_Align)))) { } __align; + }; + }; + // Define a nested type if some predicate holds. template<bool, typename _Tp = void> @@ -286,21 +308,21 @@ namespace std bool _IsFunction = is_function<_Up>::value> struct __decay_selector; + // NB: DR 705. template<typename _Up> struct __decay_selector<_Up, false, false> - { typedef _Up __type; }; + { typedef typename remove_cv<_Up>::type __type; }; template<typename _Up> struct __decay_selector<_Up, true, false> { typedef typename remove_extent<_Up>::type* __type; }; - template<typename _Up> struct __decay_selector<_Up, false, true> { typedef typename add_pointer<_Up>::type __type; }; template<typename _Tp> - struct decay + struct decay { private: typedef typename remove_reference<_Tp>::type __remove_type; |