Experimental support for a meaningful __is_swappable<T>::value.  This does not appear to be strictly needed for correct functioning of the library.  If it causes any problems, I'd rather pull it sooner rather than later.

llvm-svn: 132421
Cr-Mirrored-From: sso://chromium.googlesource.com/_direct/external/github.com/llvm/llvm-project
Cr-Mirrored-Commit: bc95cf0d5f566dfcb099154aa9520354483b592b
diff --git a/include/tuple b/include/tuple
index 49f220d..c075e42 100644
--- a/include/tuple
+++ b/include/tuple
@@ -587,7 +587,11 @@
 
 template <class ..._Tp>
 inline _LIBCPP_INLINE_VISIBILITY
-void
+typename enable_if
+<
+    __all<__is_swappable<_Tp>::value...>::value,
+    void
+>::type
 swap(tuple<_Tp...>& __t, tuple<_Tp...>& __u)
                  _NOEXCEPT_(__all<__is_nothrow_swappable<_Tp>::value...>::value)
     {__t.swap(__u);}