summaryrefslogtreecommitdiffstats
path: root/libcxx/include
diff options
context:
space:
mode:
authorZoe Carver <z.zoelec2@gmail.com>2019-09-11 17:39:24 +0000
committerZoe Carver <z.zoelec2@gmail.com>2019-09-11 17:39:24 +0000
commitb51d5605b1817fdce33c5f30316b0b5a5aef5116 (patch)
treed2e1139d3931eb5b64e897d24c8df12f4dc7987f /libcxx/include
parent340b72520292d649fdbb0d5bcf78575870f302fc (diff)
downloadbcm5719-llvm-b51d5605b1817fdce33c5f30316b0b5a5aef5116.tar.gz
bcm5719-llvm-b51d5605b1817fdce33c5f30316b0b5a5aef5116.zip
Consolidate swap, swap_ranges, and iter_swap in <type_traits>.
NFC. Thanks to @Quuxplusone (Arthur O'Dwyer) for this change. llvm-svn: 371639
Diffstat (limited to 'libcxx/include')
-rw-r--r--libcxx/include/type_traits24
-rw-r--r--libcxx/include/utility24
2 files changed, 26 insertions, 22 deletions
diff --git a/libcxx/include/type_traits b/libcxx/include/type_traits
index 657c0d568dd..03e8bba5ec8 100644
--- a/libcxx/include/type_traits
+++ b/libcxx/include/type_traits
@@ -3652,6 +3652,13 @@ _LIBCPP_INLINE_VAR constexpr bool is_nothrow_invocable_r_v
template <class _Tp> struct __is_swappable;
template <class _Tp> struct __is_nothrow_swappable;
+// swap, swap_ranges
+
+template <class _ForwardIterator1, class _ForwardIterator2>
+inline _LIBCPP_INLINE_VISIBILITY _LIBCPP_CONSTEXPR_AFTER_CXX17
+_ForwardIterator2
+swap_ranges(_ForwardIterator1 __first1, _ForwardIterator1 __last1, _ForwardIterator2 __first2);
+
template <class _Tp>
inline _LIBCPP_INLINE_VISIBILITY
#ifndef _LIBCPP_CXX03_LANG
@@ -3677,7 +3684,22 @@ inline _LIBCPP_INLINE_VISIBILITY _LIBCPP_CONSTEXPR_AFTER_CXX17
typename enable_if<
__is_swappable<_Tp>::value
>::type
-swap(_Tp (&__a)[_Np], _Tp (&__b)[_Np]) _NOEXCEPT_(__is_nothrow_swappable<_Tp>::value);
+swap(_Tp (&__a)[_Np], _Tp (&__b)[_Np]) _NOEXCEPT_(__is_nothrow_swappable<_Tp>::value)
+{
+ _VSTD::swap_ranges(__a, __a + _Np, __b);
+}
+
+template <class _ForwardIterator1, class _ForwardIterator2>
+inline _LIBCPP_INLINE_VISIBILITY _LIBCPP_CONSTEXPR_AFTER_CXX17
+_ForwardIterator2
+swap_ranges(_ForwardIterator1 __first1, _ForwardIterator1 __last1, _ForwardIterator2 __first2)
+{
+ for(; __first1 != __last1; ++__first1, (void) ++__first2)
+ swap(*__first1, *__first2);
+ return __first2;
+}
+
+// iter_swap
template <class _ForwardIterator1, class _ForwardIterator2>
inline _LIBCPP_INLINE_VISIBILITY _LIBCPP_CONSTEXPR_AFTER_CXX17
diff --git a/libcxx/include/utility b/libcxx/include/utility
index a185818b6fc..64599c8d55d 100644
--- a/libcxx/include/utility
+++ b/libcxx/include/utility
@@ -248,29 +248,11 @@ operator>=(const _Tp& __x, const _Tp& __y)
} // rel_ops
-// swap_ranges
+// swap_ranges is defined in <type_traits>`
+// swap is defined in <type_traits>
-template <class _ForwardIterator1, class _ForwardIterator2>
-inline _LIBCPP_INLINE_VISIBILITY _LIBCPP_CONSTEXPR_AFTER_CXX17
-_ForwardIterator2
-swap_ranges(_ForwardIterator1 __first1, _ForwardIterator1 __last1, _ForwardIterator2 __first2)
-{
- for(; __first1 != __last1; ++__first1, (void) ++__first2)
- swap(*__first1, *__first2);
- return __first2;
-}
-
-// forward declared in <type_traits>
-template<class _Tp, size_t _Np>
-inline _LIBCPP_INLINE_VISIBILITY _LIBCPP_CONSTEXPR_AFTER_CXX17
-typename enable_if<
- __is_swappable<_Tp>::value
->::type
-swap(_Tp (&__a)[_Np], _Tp (&__b)[_Np]) _NOEXCEPT_(__is_nothrow_swappable<_Tp>::value)
-{
- _VSTD::swap_ranges(__a, __a + _Np, __b);
-}
+// move_if_noexcept
template <class _Tp>
inline _LIBCPP_INLINE_VISIBILITY _LIBCPP_CONSTEXPR_AFTER_CXX11
OpenPOWER on IntegriCloud