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{}));