Add is_swappable/is_nothrow_swappable traits

llvm-svn: 267079
Cr-Mirrored-From: sso://chromium.googlesource.com/_direct/external/github.com/llvm/llvm-project
Cr-Mirrored-Commit: f07dd8d0a925dd8cbde7bb6198c1ba92446110ea
diff --git a/include/memory b/include/memory
index e59fd5d..7888303 100644
--- a/include/memory
+++ b/include/memory
@@ -2974,7 +2974,10 @@
 
 template <class _Tp, class _Dp>
 inline _LIBCPP_INLINE_VISIBILITY
-void
+typename enable_if<
+    __is_swappable<_Dp>::value,
+    void
+>::type
 swap(unique_ptr<_Tp, _Dp>& __x, unique_ptr<_Tp, _Dp>& __y) _NOEXCEPT {__x.swap(__y);}
 
 template <class _T1, class _D1, class _T2, class _D2>