diff options
Diffstat (limited to 'include/tuple')
-rw-r--r-- | include/tuple | 20 |
1 files changed, 10 insertions, 10 deletions
diff --git a/include/tuple b/include/tuple index 5fc27f982790..3a22aa5ff5ac 100644 --- a/include/tuple +++ b/include/tuple @@ -161,10 +161,8 @@ using tuple_element_t = typename tuple_element <_Ip, _Tp...>::type; // __tuple_leaf -template <size_t _Ip, class _Hp, bool=is_empty<_Hp>::value -#if __has_feature(is_final) - && !__is_final(_Hp) -#endif +template <size_t _Ip, class _Hp, + bool=is_empty<_Hp>::value && !__libcpp_is_final<_Hp>::value > class __tuple_leaf; @@ -511,8 +509,8 @@ class _LIBCPP_TYPE_VIS_ONLY tuple typename tuple_element<_Jp, tuple<_Up...> >::type&& get(tuple<_Up...>&&) _NOEXCEPT; public: - template <bool _Dummy = true, class _Up = typename enable_if< - __all<(_Dummy && is_default_constructible<_Tp>::value)...>::value + template <bool _Dummy = true, class = typename enable_if< + __all<__dependent_type<is_default_constructible<_Tp>, _Dummy>::value...>::value >::type> _LIBCPP_INLINE_VISIBILITY _LIBCPP_CONSTEXPR tuple() @@ -846,8 +844,6 @@ struct __ignore_t namespace { const __ignore_t<unsigned char> ignore = __ignore_t<unsigned char>(); } -template <class _Tp> class _LIBCPP_TYPE_VIS_ONLY reference_wrapper; - template <class _Tp> struct __make_tuple_return_impl { @@ -927,8 +923,12 @@ struct __tuple_less _LIBCPP_INLINE_VISIBILITY _LIBCPP_CONSTEXPR_AFTER_CXX11 bool operator()(const _Tp& __x, const _Up& __y) { - return __tuple_less<_Ip-1>()(__x, __y) || - (!__tuple_less<_Ip-1>()(__y, __x) && _VSTD::get<_Ip-1>(__x) < _VSTD::get<_Ip-1>(__y)); + const size_t __idx = tuple_size<_Tp>::value - _Ip; + if (_VSTD::get<__idx>(__x) < _VSTD::get<__idx>(__y)) + return true; + if (_VSTD::get<__idx>(__y) < _VSTD::get<__idx>(__x)) + return false; + return __tuple_less<_Ip-1>()(__x, __y); } }; |