Use _GLIBCXX_NOEXCEPT_IF for std::swap
authorJonathan Wakely <jwakely@redhat.com>
Mon, 29 Apr 2019 13:25:38 +0000 (14:25 +0100)
committerJonathan Wakely <redi@gcc.gnu.org>
Mon, 29 Apr 2019 13:25:38 +0000 (14:25 +0100)
* include/bits/move.h (swap(T&, T&), swap(T (&)[N], T (&)[N])): Use
_GLIBCXX_NOEXCEPT_IF to simplify declarations.

From-SVN: r270650

libstdc++-v3/ChangeLog
libstdc++-v3/include/bits/move.h

index 2168a795f48cfe196eb84cf02b30de7ece10ce44..b93f6707ad53bef33e4e5e207ad7a1f841a62f3a 100644 (file)
@@ -1,5 +1,8 @@
 2019-04-29  Jonathan Wakely  <jwakely@redhat.com>
 
+       * include/bits/move.h (swap(T&, T&), swap(T (&)[N], T (&)[N])): Use
+       _GLIBCXX_NOEXCEPT_IF to simplify declarations.
+
        PR libstdc++/71312
        * src/c++11/shared_ptr.cc (get_mutex): Align pool mutexes to 64 bytes.
 
index 9ebf4453cdd3972ca20d89b758eb5cbfa47f69ab..996078cfbce436b72b5878b18210354c1cc97651 100644 (file)
@@ -179,13 +179,12 @@ _GLIBCXX_BEGIN_NAMESPACE_VERSION
     typename enable_if<__and_<__not_<__is_tuple_like<_Tp>>,
                              is_move_constructible<_Tp>,
                              is_move_assignable<_Tp>>::value>::type
-    swap(_Tp& __a, _Tp& __b)
-    noexcept(__and_<is_nothrow_move_constructible<_Tp>,
-                   is_nothrow_move_assignable<_Tp>>::value)
 #else
     void
-    swap(_Tp& __a, _Tp& __b)
 #endif
+    swap(_Tp& __a, _Tp& __b)
+    _GLIBCXX_NOEXCEPT_IF((__and_<is_nothrow_move_constructible<_Tp>,
+                                is_nothrow_move_assignable<_Tp>>::value))
     {
       // concept requirements
       __glibcxx_function_requires(_SGIAssignableConcept<_Tp>)
@@ -202,12 +201,11 @@ _GLIBCXX_BEGIN_NAMESPACE_VERSION
     inline
 #if __cplusplus >= 201103L
     typename enable_if<__is_swappable<_Tp>::value>::type
-    swap(_Tp (&__a)[_Nm], _Tp (&__b)[_Nm])
-    noexcept(__is_nothrow_swappable<_Tp>::value)
 #else
     void
-    swap(_Tp (&__a)[_Nm], _Tp (&__b)[_Nm])
 #endif
+    swap(_Tp (&__a)[_Nm], _Tp (&__b)[_Nm])
+    _GLIBCXX_NOEXCEPT_IF(__is_nothrow_swappable<_Tp>::value)
     {
       for (size_t __n = 0; __n < _Nm; ++__n)
        swap(__a[__n], __b[__n]);