@@ -222,7 +222,6 @@ template <class... Types>
222
222
#include < __tuple/tuple_like_ext.h>
223
223
#include < __tuple/tuple_size.h>
224
224
#include < __tuple/tuple_types.h>
225
- #include < __type_traits/apply_cv.h>
226
225
#include < __type_traits/common_reference.h>
227
226
#include < __type_traits/common_type.h>
228
227
#include < __type_traits/conditional.h>
@@ -1286,14 +1285,14 @@ struct __tuple_cat_return_ref_imp;
1286
1285
template <class ... _Types, size_t ... _I0, class _Tuple0 >
1287
1286
struct __tuple_cat_return_ref_imp <tuple<_Types...>, __tuple_indices<_I0...>, _Tuple0> {
1288
1287
typedef _LIBCPP_NODEBUG __libcpp_remove_reference_t <_Tuple0> _T0;
1289
- typedef tuple<_Types..., __apply_cv_t <_Tuple0, typename tuple_element<_I0, _T0>::type>&&...> type;
1288
+ typedef tuple<_Types..., __copy_cvref_t <_Tuple0, typename tuple_element<_I0, _T0>::type>&&...> type;
1290
1289
};
1291
1290
1292
1291
template <class ... _Types, size_t ... _I0, class _Tuple0 , class _Tuple1 , class ... _Tuples>
1293
1292
struct __tuple_cat_return_ref_imp <tuple<_Types...>, __tuple_indices<_I0...>, _Tuple0, _Tuple1, _Tuples...>
1294
1293
: public __tuple_cat_return_ref_imp<
1295
1294
tuple<_Types...,
1296
- __apply_cv_t <_Tuple0, typename tuple_element<_I0, __libcpp_remove_reference_t <_Tuple0>>::type>&&...>,
1295
+ __copy_cvref_t <_Tuple0, typename tuple_element<_I0, __libcpp_remove_reference_t <_Tuple0>>::type>&&...>,
1297
1296
typename __make_tuple_indices<tuple_size<__libcpp_remove_reference_t <_Tuple1> >::value>::type,
1298
1297
_Tuple1,
1299
1298
_Tuples...> {};
@@ -1327,7 +1326,7 @@ struct __tuple_cat<tuple<_Types...>, __tuple_indices<_I0...>, __tuple_indices<_J
1327
1326
(void )__t ; // avoid unused parameter warning on GCC when _I0 is empty
1328
1327
typedef _LIBCPP_NODEBUG __libcpp_remove_reference_t <_Tuple0> _T0;
1329
1328
typedef _LIBCPP_NODEBUG __libcpp_remove_reference_t <_Tuple1> _T1;
1330
- return __tuple_cat<tuple<_Types..., __apply_cv_t <_Tuple0, typename tuple_element<_J0, _T0>::type>&&...>,
1329
+ return __tuple_cat<tuple<_Types..., __copy_cvref_t <_Tuple0, typename tuple_element<_J0, _T0>::type>&&...>,
1331
1330
typename __make_tuple_indices<sizeof ...(_Types) + tuple_size<_T0>::value>::type,
1332
1331
typename __make_tuple_indices<tuple_size<_T1>::value>::type>()(
1333
1332
std::forward_as_tuple (
@@ -1375,22 +1374,22 @@ inline _LIBCPP_HIDE_FROM_ABI constexpr _Tp __make_from_tuple_impl(_Tuple&& __t,
1375
1374
}
1376
1375
#else
1377
1376
template <class _Tp , class _Tuple , size_t ... _Idx>
1378
- inline _LIBCPP_HIDE_FROM_ABI constexpr _Tp __make_from_tuple_impl (_Tuple&& __t , __tuple_indices<_Idx...>,
1377
+ inline _LIBCPP_HIDE_FROM_ABI constexpr _Tp __make_from_tuple_impl (_Tuple&& __t , __tuple_indices<_Idx...>,
1379
1378
enable_if_t <is_constructible_v<_Tp, decltype (std::get<_Idx>(std::forward<_Tuple>(__t )))...>> * = nullptr)
1380
1379
_LIBCPP_NOEXCEPT_RETURN(_Tp(std::get<_Idx>(std::forward<_Tuple>(__t ))...))
1381
1380
#endif // _LIBCPP_STD_VER >= 20
1382
1381
1383
- template <class _Tp , class _Tuple ,
1382
+ template <class _Tp , class _Tuple ,
1384
1383
class _Seq = typename __make_tuple_indices<tuple_size_v<remove_reference_t <_Tuple>>>::type, class = void >
1385
1384
inline constexpr bool __can_make_from_tuple = false ;
1386
1385
1387
1386
template <class _Tp , class _Tuple , size_t ... _Idx>
1388
- inline constexpr bool __can_make_from_tuple<_Tp, _Tuple, __tuple_indices<_Idx...>,
1387
+ inline constexpr bool __can_make_from_tuple<_Tp, _Tuple, __tuple_indices<_Idx...>,
1389
1388
enable_if_t <is_constructible_v<_Tp, decltype (std::get<_Idx>(std::declval<_Tuple>()))...>>> = true ;
1390
1389
1391
- // Based on LWG3528(https://wg21.link/LWG3528) and http://eel.is/c++draft/description#structure.requirements-9,
1392
- // the standard allows to impose requirements, we constraint std::make_from_tuple to make std::make_from_tuple
1393
- // SFINAE friendly and also avoid worse diagnostic messages. We still keep the constraints of std::__make_from_tuple_impl
1390
+ // Based on LWG3528(https://wg21.link/LWG3528) and http://eel.is/c++draft/description#structure.requirements-9,
1391
+ // the standard allows to impose requirements, we constraint std::make_from_tuple to make std::make_from_tuple
1392
+ // SFINAE friendly and also avoid worse diagnostic messages. We still keep the constraints of std::__make_from_tuple_impl
1394
1393
// so that std::__make_from_tuple_impl will have the same advantages when used alone.
1395
1394
#if _LIBCPP_STD_VER >= 20
1396
1395
template <class _Tp , class _Tuple >
0 commit comments