Revert r372777: [libc++] Implement LWG 2510 and its follow-ups
This also reverts:
- r372778: [libc++] Implement LWG 3158
- r372782: [libc++] Try fixing tests that fail on GCC 5 and older
- r372787: Purge mentions of GCC 4 from the test suite
Reason: the change breaks compilation of LLVM with libc++, for details see
http://lists.llvm.org/pipermail/libcxx-dev/2019-September/000599.html
llvm-svn: 372832
Cr-Mirrored-From: sso://chromium.googlesource.com/_direct/external/github.com/llvm/llvm-project
Cr-Mirrored-Commit: a3d337a9a7d00d82bb190c5e551181d3998f6b98
diff --git a/include/tuple b/include/tuple
index c4cd3bc..32bc869 100644
--- a/include/tuple
+++ b/include/tuple
@@ -19,7 +19,7 @@
template <class... T>
class tuple {
public:
- explicit(see-below) constexpr tuple();
+ constexpr tuple();
explicit(see-below) tuple(const T&...); // constexpr in C++14
template <class... U>
explicit(see-below) tuple(U&&...); // constexpr in C++14
@@ -500,22 +500,9 @@
struct _CheckArgsConstructor<true, _Dummy>
{
template <class ..._Args>
- struct __enable_implicit_default
- // In C++03, there's no way to implement the resolution of LWG2510.
-#ifdef _LIBCPP_CXX03_LANG
- : true_type
-#else
- : __all<__is_implicitly_default_constructible<_Args>::value...>
-#endif
- { };
-
- template <class ..._Args>
- struct __enable_explicit_default
- : integral_constant<bool,
- __all<is_default_constructible<_Args>::value...>::value &&
- !__enable_implicit_default<_Args...>::value
- >
- { };
+ static constexpr bool __enable_default() {
+ return __all<is_default_constructible<_Args>::value...>::value;
+ }
template <class ..._Args>
static constexpr bool __enable_explicit() {
@@ -654,29 +641,22 @@
const typename tuple_element<_Jp, tuple<_Up...> >::type&& get(const tuple<_Up...>&&) _NOEXCEPT;
public:
- template <bool _Dummy = true, _EnableIf<
- _CheckArgsConstructor<_Dummy>::template __enable_implicit_default<_Tp...>::value
- , void*> = nullptr>
- _LIBCPP_INLINE_VISIBILITY _LIBCPP_CONSTEXPR
- tuple()
- _NOEXCEPT_(__all<is_nothrow_default_constructible<_Tp>::value...>::value) {}
-
- template <bool _Dummy = true, _EnableIf<
- _CheckArgsConstructor<_Dummy>::template __enable_explicit_default<_Tp...>::value
- , void*> = nullptr>
- explicit _LIBCPP_INLINE_VISIBILITY _LIBCPP_CONSTEXPR
- tuple()
+ template <bool _Dummy = true, class = typename enable_if<
+ _CheckArgsConstructor<_Dummy>::template __enable_default<_Tp...>()
+ >::type>
+ _LIBCPP_INLINE_VISIBILITY
+ _LIBCPP_CONSTEXPR tuple()
_NOEXCEPT_(__all<is_nothrow_default_constructible<_Tp>::value...>::value) {}
tuple(tuple const&) = default;
tuple(tuple&&) = default;
- template <class _AllocArgT, class _Alloc, bool _Dummy = true, _EnableIf<
+ template <class _AllocArgT, class _Alloc, bool _Dummy = true, class = _EnableIf<
_And<
_IsSame<allocator_arg_t, _AllocArgT>,
- typename _CheckArgsConstructor<_Dummy>::template __enable_implicit_default<_Tp...>
+ __dependent_type<is_default_constructible<_Tp>, _Dummy>...
>::value
- , void*> = nullptr
+ >
>
_LIBCPP_INLINE_VISIBILITY
tuple(_AllocArgT, _Alloc const& __a)
@@ -685,20 +665,6 @@
typename __make_tuple_indices<sizeof...(_Tp), 0>::type(),
__tuple_types<_Tp...>()) {}
- template <class _AllocArgT, class _Alloc, bool _Dummy = true, _EnableIf<
- _And<
- _IsSame<allocator_arg_t, _AllocArgT>,
- typename _CheckArgsConstructor<_Dummy>::template __enable_explicit_default<_Tp...>
- >::value
- , void*> = nullptr
- >
- explicit _LIBCPP_INLINE_VISIBILITY
- tuple(_AllocArgT, _Alloc const& __a)
- : __base_(allocator_arg_t(), __a,
- __tuple_indices<>(), __tuple_types<>(),
- typename __make_tuple_indices<sizeof...(_Tp), 0>::type(),
- __tuple_types<_Tp...>()) {}
-
template <bool _Dummy = true,
typename enable_if
<