Make tuple_constructible and family lazy again.

llvm-svn: 274413
Cr-Mirrored-From: sso://chromium.googlesource.com/_direct/external/github.com/llvm/llvm-project
Cr-Mirrored-Commit: 7b60958aea770570db3833b78bee10ee04b43cee
diff --git a/include/__tuple b/include/__tuple
index 2cd5284..0d180c7 100644
--- a/include/__tuple
+++ b/include/__tuple
@@ -373,21 +373,27 @@
 struct __tuple_sfinae_base {
   template <class ..._FromArgs, class ..._ToArgs>
   static auto __test_constructible(__tuple_types<_FromArgs...>, __tuple_types<_ToArgs...>)
-    -> __all<is_constructible<_ToArgs, _FromArgs>::value...>;
+    -> __all<typename enable_if<
+        is_constructible<_ToArgs, _FromArgs>::value
+      , bool>::type{true}...>;
   static auto __test_constructible(...) -> false_type;
   template <class _Types1, class _Types2>
   using __constructible = decltype(__test_constructible(_Types1{}, _Types2{}));
 
   template <class ..._FromArgs, class ..._ToArgs>
   static auto __test_convertible(__tuple_types<_FromArgs...>, __tuple_types<_ToArgs...>)
-    -> __all<is_convertible<_FromArgs, _ToArgs>::value...>;
+    -> __all<typename enable_if<
+          is_convertible<_FromArgs, _ToArgs>::value
+      , bool>::type{true}...>;
   static auto __test_convertible(...) -> false_type;
   template <class _Types1, class _Types2>
   using __convertible = decltype(__test_convertible(_Types1{}, _Types2{}));
 
   template <class ..._FromArgs, class ..._ToArgs>
   static auto __test_assignable(__tuple_types<_FromArgs...>, __tuple_types<_ToArgs...>)
-    -> __all<is_assignable<_ToArgs&, _FromArgs>::value...>;
+    -> __all<typename enable_if<
+          is_assignable<_ToArgs&, _FromArgs>::value
+      , bool>::type{true}...>;
   static auto __test_assignable(...) -> false_type;
   template <class _Types1, class _Types2>
   using __assignable = decltype(__test_assignable(_Types1{}, _Types2{}));