751 using _TCC = _TupleConstraints<_Cond, _Elements...>;
754 template<
bool _Dummy>
755 using _ImplicitDefaultCtor = __enable_if_t<
756 _TCC<_Dummy>::__is_implicitly_default_constructible(),
760 template<
bool _Dummy>
761 using _ExplicitDefaultCtor = __enable_if_t<
762 _TCC<_Dummy>::__is_explicitly_default_constructible(),
766 template<
bool _Cond,
typename... _Args>
767 using _ImplicitCtor = __enable_if_t<
768 _TCC<_Cond>::template __is_implicitly_constructible<_Args...>(),
772 template<
bool _Cond,
typename... _Args>
773 using _ExplicitCtor = __enable_if_t<
774 _TCC<_Cond>::template __is_explicitly_constructible<_Args...>(),
777 template<
typename... _UElements>
779 __enable_if_t<
sizeof...(_UElements) ==
sizeof...(_Elements),
bool>
781 {
return __and_<is_assignable<_Elements&, _UElements>...>::value; }
784 template<
typename... _UElements>
785 static constexpr bool __nothrow_assignable()
788 __and_<is_nothrow_assignable<_Elements&, _UElements>...>::value;
792 template<
typename... _UElements>
793 static constexpr bool __nothrow_constructible()
796 __and_<is_nothrow_constructible<_Elements, _UElements>...>::value;
800 template<
typename _Up>
801 static constexpr bool __valid_args()
803 return sizeof...(_Elements) == 1
808 template<
typename,
typename,
typename... _Tail>
809 static constexpr bool __valid_args()
810 {
return (
sizeof...(_Tail) + 2) ==
sizeof...(_Elements); }
821 template<
typename _Tuple,
typename =
tuple,
822 typename = __remove_cvref_t<_Tuple>>
828 template<
typename _Tuple,
typename _Tp,
typename _Up>
829 struct _UseOtherCtor<_Tuple,
tuple<_Tp>,
tuple<_Up>>
830 : __or_<is_convertible<_Tuple, _Tp>, is_constructible<_Tp, _Tuple>>::type
834 template<
typename _Tuple,
typename _Tp>
835 struct _UseOtherCtor<_Tuple,
tuple<_Tp>,
tuple<_Tp>>
842 template<
typename _Tuple>
843 static constexpr bool __use_other_ctor()
844 {
return _UseOtherCtor<_Tuple>::value; }
846#if __cplusplus > 202002L
847 template<
typename... _Args>
848 static constexpr bool __constructible
849 = _TCC<true>::template __constructible<_Args...>::value;
851 template<
typename... _Args>
852 static constexpr bool __convertible
853 = _TCC<true>::template __convertible<_Args...>::value;
857 template<
typename _Dummy = void,
858 _ImplicitDefaultCtor<is_void<_Dummy>::value> =
true>
861 noexcept(__and_<is_nothrow_default_constructible<_Elements>...>::value)
864 template<
typename _Dummy = void,
865 _ExplicitDefaultCtor<is_void<_Dummy>::value> =
false>
868 noexcept(__and_<is_nothrow_default_constructible<_Elements>...>::value)
871 template<
bool _NotEmpty = (
sizeof...(_Elements) >= 1),
872 _ImplicitCtor<_NotEmpty,
const _Elements&...> =
true>
874 tuple(
const _Elements&... __elements)
875 noexcept(__nothrow_constructible<
const _Elements&...>())
878 template<
bool _NotEmpty = (
sizeof...(_Elements) >= 1),
879 _ExplicitCtor<_NotEmpty,
const _Elements&...> =
false>
881 tuple(
const _Elements&... __elements)
882 noexcept(__nothrow_constructible<
const _Elements&...>())
885 template<
typename... _UElements,
886 bool _Valid = __valid_args<_UElements...>(),
887 _ImplicitCtor<_Valid, _UElements...> =
true>
889 tuple(_UElements&&... __elements)
890 noexcept(__nothrow_constructible<_UElements...>())
891 :
_Inherited(std::forward<_UElements>(__elements)...) { }
893 template<
typename... _UElements,
894 bool _Valid = __valid_args<_UElements...>(),
895 _ExplicitCtor<_Valid, _UElements...> =
false>
897 tuple(_UElements&&... __elements)
898 noexcept(__nothrow_constructible<_UElements...>())
899 :
_Inherited(std::forward<_UElements>(__elements)...) { }
905 template<
typename... _UElements,
906 bool _Valid = (
sizeof...(_Elements) ==
sizeof...(_UElements))
908 _ImplicitCtor<_Valid,
const _UElements&...> =
true>
911 noexcept(__nothrow_constructible<
const _UElements&...>())
915 template<
typename... _UElements,
916 bool _Valid = (
sizeof...(_Elements) ==
sizeof...(_UElements))
918 _ExplicitCtor<_Valid,
const _UElements&...> =
false>
921 noexcept(__nothrow_constructible<
const _UElements&...>())
925 template<
typename... _UElements,
926 bool _Valid = (
sizeof...(_Elements) ==
sizeof...(_UElements))
928 _ImplicitCtor<_Valid, _UElements...> =
true>
931 noexcept(__nothrow_constructible<_UElements...>())
934 template<
typename... _UElements,
935 bool _Valid = (
sizeof...(_Elements) ==
sizeof...(_UElements))
937 _ExplicitCtor<_Valid, _UElements...> =
false>
940 noexcept(__nothrow_constructible<_UElements...>())
943#if __cplusplus > 202002L
944 template<
typename... _UElements>
945 requires (
sizeof...(_Elements) ==
sizeof...(_UElements))
947 && __constructible<_UElements&...>
948 explicit(!__convertible<_UElements&...>)
951 noexcept(__nothrow_constructible<_UElements&...>())
955 template<
typename... _UElements>
956 requires (
sizeof...(_Elements) ==
sizeof...(_UElements))
958 && __constructible<const _UElements...>
959 explicit(!__convertible<const _UElements...>)
962 noexcept(__nothrow_constructible<
const _UElements...>())
968 template<
typename _Alloc,
969 _ImplicitDefaultCtor<is_object<_Alloc>::value> =
true>
971 tuple(allocator_arg_t __tag,
const _Alloc& __a)
974 template<
typename _Alloc,
bool _NotEmpty = (
sizeof...(_Elements) >= 1),
975 _ImplicitCtor<_NotEmpty,
const _Elements&...> =
true>
977 tuple(allocator_arg_t __tag,
const _Alloc& __a,
978 const _Elements&... __elements)
981 template<
typename _Alloc,
bool _NotEmpty = (
sizeof...(_Elements) >= 1),
982 _ExplicitCtor<_NotEmpty,
const _Elements&...> =
false>
985 tuple(allocator_arg_t __tag,
const _Alloc& __a,
986 const _Elements&... __elements)
989 template<
typename _Alloc,
typename... _UElements,
990 bool _Valid = __valid_args<_UElements...>(),
991 _ImplicitCtor<_Valid, _UElements...> =
true>
993 tuple(allocator_arg_t __tag,
const _Alloc& __a,
994 _UElements&&... __elements)
995 :
_Inherited(__tag, __a, std::forward<_UElements>(__elements)...)
998 template<
typename _Alloc,
typename... _UElements,
999 bool _Valid = __valid_args<_UElements...>(),
1000 _ExplicitCtor<_Valid, _UElements...> =
false>
1001 _GLIBCXX20_CONSTEXPR
1003 tuple(allocator_arg_t __tag,
const _Alloc& __a,
1004 _UElements&&... __elements)
1005 :
_Inherited(__tag, __a, std::forward<_UElements>(__elements)...)
1008 template<
typename _Alloc>
1009 _GLIBCXX20_CONSTEXPR
1010 tuple(allocator_arg_t __tag,
const _Alloc& __a,
const tuple& __in)
1013 template<
typename _Alloc>
1014 _GLIBCXX20_CONSTEXPR
1015 tuple(allocator_arg_t __tag,
const _Alloc& __a,
tuple&& __in)
1018 template<
typename _Alloc,
typename... _UElements,
1019 bool _Valid = (
sizeof...(_Elements) ==
sizeof...(_UElements))
1021 _ImplicitCtor<_Valid,
const _UElements&...> =
true>
1022 _GLIBCXX20_CONSTEXPR
1023 tuple(allocator_arg_t __tag,
const _Alloc& __a,
1026 static_cast<const _Tuple_impl<0, _UElements...
>&>(__in))
1029 template<
typename _Alloc,
typename... _UElements,
1030 bool _Valid = (
sizeof...(_Elements) ==
sizeof...(_UElements))
1032 _ExplicitCtor<_Valid,
const _UElements&...> =
false>
1033 _GLIBCXX20_CONSTEXPR
1035 tuple(allocator_arg_t __tag,
const _Alloc& __a,
1038 static_cast<const _Tuple_impl<0, _UElements...
>&>(__in))
1041 template<
typename _Alloc,
typename... _UElements,
1042 bool _Valid = (
sizeof...(_Elements) ==
sizeof...(_UElements))
1044 _ImplicitCtor<_Valid, _UElements...> =
true>
1045 _GLIBCXX20_CONSTEXPR
1046 tuple(allocator_arg_t __tag,
const _Alloc& __a,
1049 static_cast<_Tuple_impl<0, _UElements...
>&&>(__in))
1052 template<
typename _Alloc,
typename... _UElements,
1053 bool _Valid = (
sizeof...(_Elements) ==
sizeof...(_UElements))
1055 _ExplicitCtor<_Valid, _UElements...> =
false>
1056 _GLIBCXX20_CONSTEXPR
1058 tuple(allocator_arg_t __tag,
const _Alloc& __a,
1061 static_cast<_Tuple_impl<0, _UElements...
>&&>(__in))
1064#if __cplusplus > 202002L
1065 template<
typename _Alloc,
typename... _UElements>
1066 requires (
sizeof...(_Elements) ==
sizeof...(_UElements))
1068 && __constructible<_UElements&...>
1069 explicit(!__convertible<_UElements&...>)
1071 tuple(allocator_arg_t __tag,
const _Alloc& __a,
1074 static_cast<_Tuple_impl<0, _UElements...
>&>(__in))
1077 template<
typename _Alloc,
typename... _UElements>
1078 requires (
sizeof...(_Elements) ==
sizeof...(_UElements))
1080 && __constructible<const _UElements...>
1081 explicit(!__convertible<const _UElements...>)
1083 tuple(allocator_arg_t __tag,
const _Alloc& __a,
1086 static_cast<const _Tuple_impl<0, _UElements...
>&&>(__in))
1092 _GLIBCXX20_CONSTEXPR
1094 operator=(__conditional_t<__assignable<const _Elements&...>(),
1096 const __nonesuch&> __in)
1097 noexcept(__nothrow_assignable<
const _Elements&...>())
1099 this->_M_assign(__in);
1103 _GLIBCXX20_CONSTEXPR
1105 operator=(__conditional_t<__assignable<_Elements...>(),
1108 noexcept(__nothrow_assignable<_Elements...>())
1114 template<
typename... _UElements>
1115 _GLIBCXX20_CONSTEXPR
1116 __enable_if_t<__assignable<
const _UElements&...>(),
tuple&>
1118 noexcept(__nothrow_assignable<
const _UElements&...>())
1120 this->_M_assign(__in);
1124 template<
typename... _UElements>
1125 _GLIBCXX20_CONSTEXPR
1126 __enable_if_t<__assignable<_UElements...>(),
tuple&>
1128 noexcept(__nothrow_assignable<_UElements...>())
1134#if __cplusplus > 202002L
1135 constexpr const tuple&
1136 operator=(
const tuple& __in)
const
1137 requires (is_copy_assignable_v<const _Elements> && ...)
1139 this->_M_assign(__in);
1143 constexpr const tuple&
1144 operator=(
tuple&& __in)
const
1145 requires (is_assignable_v<const _Elements&, _Elements> && ...)
1151 template<
typename... _UElements>
1152 constexpr const tuple&
1154 requires (
sizeof...(_Elements) ==
sizeof...(_UElements))
1155 && (is_assignable_v<const _Elements&, const _UElements&> && ...)
1157 this->_M_assign(__in);
1161 template<
typename... _UElements>
1162 constexpr const tuple&
1164 requires (
sizeof...(_Elements) ==
sizeof...(_UElements))
1165 && (is_assignable_v<const _Elements&, _UElements> && ...)
1173 _GLIBCXX20_CONSTEXPR
1176 noexcept(__and_<__is_nothrow_swappable<_Elements>...>::value)
1177 { _Inherited::_M_swap(__in); }
1179#if __cplusplus > 202002L
1187 swap(
const tuple& __in)
const
1188 noexcept(__and_v<__is_nothrow_swappable<const _Elements>...>)
1189 requires (is_swappable_v<const _Elements> && ...)
1190 { _Inherited::_M_swap(__in); }
1237 template<
bool _Dummy,
typename _U1,
typename _U2>
1238 using _ImplicitDefaultCtor = __enable_if_t<
1239 _TupleConstraints<_Dummy, _U1, _U2>::
1240 __is_implicitly_default_constructible(),
1244 template<
bool _Dummy,
typename _U1,
typename _U2>
1245 using _ExplicitDefaultCtor = __enable_if_t<
1246 _TupleConstraints<_Dummy, _U1, _U2>::
1247 __is_explicitly_default_constructible(),
1250 template<
bool _Dummy>
1251 using _TCC = _TupleConstraints<_Dummy, _T1, _T2>;
1254 template<
bool _Cond,
typename _U1,
typename _U2>
1255 using _ImplicitCtor = __enable_if_t<
1256 _TCC<_Cond>::template __is_implicitly_constructible<_U1, _U2>(),
1260 template<
bool _Cond,
typename _U1,
typename _U2>
1261 using _ExplicitCtor = __enable_if_t<
1262 _TCC<_Cond>::template __is_explicitly_constructible<_U1, _U2>(),
1265 template<
typename _U1,
typename _U2>
1266 static constexpr bool __assignable()
1268 return __and_<is_assignable<_T1&, _U1>,
1272 template<
typename _U1,
typename _U2>
1273 static constexpr bool __nothrow_assignable()
1275 return __and_<is_nothrow_assignable<_T1&, _U1>,
1279 template<
typename _U1,
typename _U2>
1280 static constexpr bool __nothrow_constructible()
1282 return __and_<is_nothrow_constructible<_T1, _U1>,
1286 static constexpr bool __nothrow_default_constructible()
1288 return __and_<is_nothrow_default_constructible<_T1>,
1292 template<
typename _U1>
1293 static constexpr bool __is_alloc_arg()
1296#if __cplusplus > 202002L
1297 template<
typename _U1,
typename _U2>
1298 static constexpr bool __constructible
1299 = _TCC<true>::template __constructible<_U1, _U2>::value;
1301 template<
typename _U1,
typename _U2>
1302 static constexpr bool __convertible
1303 = _TCC<true>::template __convertible<_U1, _U2>::value;
1307 template<
bool _Dummy =
true,
1308 _ImplicitDefaultCtor<_Dummy, _T1, _T2> =
true>
1311 noexcept(__nothrow_default_constructible())
1314 template<
bool _Dummy =
true,
1315 _ExplicitDefaultCtor<_Dummy, _T1, _T2> =
false>
1318 noexcept(__nothrow_default_constructible())
1321 template<
bool _Dummy =
true,
1322 _ImplicitCtor<_Dummy, const _T1&, const _T2&> =
true>
1324 tuple(
const _T1& __a1,
const _T2& __a2)
1325 noexcept(__nothrow_constructible<const _T1&, const _T2&>())
1328 template<
bool _Dummy =
true,
1329 _ExplicitCtor<_Dummy, const _T1&, const _T2&> =
false>
1331 tuple(
const _T1& __a1,
const _T2& __a2)
1332 noexcept(__nothrow_constructible<const _T1&, const _T2&>())
1335 template<
typename _U1,
typename _U2,
1336 _ImplicitCtor<!__is_alloc_arg<_U1>(), _U1, _U2> =
true>
1338 tuple(_U1&& __a1, _U2&& __a2)
1339 noexcept(__nothrow_constructible<_U1, _U2>())
1340 :
_Inherited(std::forward<_U1>(__a1), std::forward<_U2>(__a2)) { }
1342 template<
typename _U1,
typename _U2,
1343 _ExplicitCtor<!__is_alloc_arg<_U1>(), _U1, _U2> =
false>
1345 tuple(_U1&& __a1, _U2&& __a2)
1346 noexcept(__nothrow_constructible<_U1, _U2>())
1347 :
_Inherited(std::forward<_U1>(__a1), std::forward<_U2>(__a2)) { }
1353 template<
typename _U1,
typename _U2,
1354 _ImplicitCtor<true, const _U1&, const _U2&> =
true>
1357 noexcept(__nothrow_constructible<const _U1&, const _U2&>())
1360 template<
typename _U1,
typename _U2,
1361 _ExplicitCtor<true, const _U1&, const _U2&> =
false>
1364 noexcept(__nothrow_constructible<const _U1&, const _U2&>())
1367 template<
typename _U1,
typename _U2,
1368 _ImplicitCtor<true, _U1, _U2> =
true>
1371 noexcept(__nothrow_constructible<_U1, _U2>())
1374 template<
typename _U1,
typename _U2,
1375 _ExplicitCtor<true, _U1, _U2> =
false>
1378 noexcept(__nothrow_constructible<_U1, _U2>())
1381#if __cplusplus > 202002L
1382 template<
typename _U1,
typename _U2>
1383 requires __constructible<_U1&, _U2&>
1384 explicit(!__convertible<_U1&, _U2&>)
1387 noexcept(__nothrow_constructible<_U1&, _U2&>())
1390 template<
typename _U1,
typename _U2>
1391 requires __constructible<const _U1, const _U2>
1392 explicit(!__convertible<const _U1, const _U2>)
1395 noexcept(__nothrow_constructible<const _U1, const _U2>())
1399 template<
typename _U1,
typename _U2,
1400 _ImplicitCtor<true, const _U1&, const _U2&> =
true>
1403 noexcept(__nothrow_constructible<const _U1&, const _U2&>())
1406 template<
typename _U1,
typename _U2,
1407 _ExplicitCtor<true, const _U1&, const _U2&> =
false>
1410 noexcept(__nothrow_constructible<const _U1&, const _U2&>())
1413 template<
typename _U1,
typename _U2,
1414 _ImplicitCtor<true, _U1, _U2> =
true>
1417 noexcept(__nothrow_constructible<_U1, _U2>())
1419 std::forward<_U2>(__in.second)) { }
1421 template<
typename _U1,
typename _U2,
1422 _ExplicitCtor<true, _U1, _U2> =
false>
1425 noexcept(__nothrow_constructible<_U1, _U2>())
1427 std::forward<_U2>(__in.second)) { }
1429#if __cplusplus > 202002L
1430 template<
typename _U1,
typename _U2>
1431 requires __constructible<_U1&, _U2&>
1432 explicit(!__convertible<_U1&, _U2&>)
1435 noexcept(__nothrow_constructible<_U1&, _U2&>())
1438 template<
typename _U1,
typename _U2>
1439 requires __constructible<const _U1, const _U2>
1440 explicit(!__convertible<const _U1, const _U2>)
1443 noexcept(__nothrow_constructible<const _U1, const _U2>())
1444 :
_Inherited(std::forward<const _U1>(__in.first),
1445 std::forward<const _U2>(__in.second)) { }
1450 template<
typename _Alloc,
1451 _ImplicitDefaultCtor<is_object<_Alloc>::value, _T1, _T2> =
true>
1452 _GLIBCXX20_CONSTEXPR
1453 tuple(allocator_arg_t __tag,
const _Alloc& __a)
1456 template<
typename _Alloc,
bool _Dummy =
true,
1457 _ImplicitCtor<_Dummy, const _T1&, const _T2&> =
true>
1458 _GLIBCXX20_CONSTEXPR
1459 tuple(allocator_arg_t __tag,
const _Alloc& __a,
1460 const _T1& __a1,
const _T2& __a2)
1463 template<
typename _Alloc,
bool _Dummy =
true,
1464 _ExplicitCtor<_Dummy, const _T1&, const _T2&> =
false>
1466 _GLIBCXX20_CONSTEXPR
1467 tuple(allocator_arg_t __tag,
const _Alloc& __a,
1468 const _T1& __a1,
const _T2& __a2)
1471 template<
typename _Alloc,
typename _U1,
typename _U2,
1472 _ImplicitCtor<true, _U1, _U2> =
true>
1473 _GLIBCXX20_CONSTEXPR
1474 tuple(allocator_arg_t __tag,
const _Alloc& __a, _U1&& __a1, _U2&& __a2)
1475 :
_Inherited(__tag, __a, std::forward<_U1>(__a1),
1476 std::forward<_U2>(__a2)) { }
1478 template<
typename _Alloc,
typename _U1,
typename _U2,
1479 _ExplicitCtor<true, _U1, _U2> =
false>
1481 _GLIBCXX20_CONSTEXPR
1482 tuple(allocator_arg_t __tag,
const _Alloc& __a,
1483 _U1&& __a1, _U2&& __a2)
1484 :
_Inherited(__tag, __a, std::forward<_U1>(__a1),
1485 std::forward<_U2>(__a2)) { }
1487 template<
typename _Alloc>
1488 _GLIBCXX20_CONSTEXPR
1489 tuple(allocator_arg_t __tag,
const _Alloc& __a,
const tuple& __in)
1492 template<
typename _Alloc>
1493 _GLIBCXX20_CONSTEXPR
1494 tuple(allocator_arg_t __tag,
const _Alloc& __a,
tuple&& __in)
1497 template<
typename _Alloc,
typename _U1,
typename _U2,
1498 _ImplicitCtor<true, const _U1&, const _U2&> =
true>
1499 _GLIBCXX20_CONSTEXPR
1500 tuple(allocator_arg_t __tag,
const _Alloc& __a,
1506 template<
typename _Alloc,
typename _U1,
typename _U2,
1507 _ExplicitCtor<true, const _U1&, const _U2&> =
false>
1509 _GLIBCXX20_CONSTEXPR
1510 tuple(allocator_arg_t __tag,
const _Alloc& __a,
1516 template<
typename _Alloc,
typename _U1,
typename _U2,
1517 _ImplicitCtor<true, _U1, _U2> =
true>
1518 _GLIBCXX20_CONSTEXPR
1523 template<
typename _Alloc,
typename _U1,
typename _U2,
1524 _ExplicitCtor<true, _U1, _U2> =
false>
1526 _GLIBCXX20_CONSTEXPR
1531#if __cplusplus > 202002L
1532 template<
typename _Alloc,
typename _U1,
typename _U2>
1533 requires __constructible<_U1&, _U2&>
1534 explicit(!__convertible<_U1&, _U2&>)
1536 tuple(allocator_arg_t __tag,
const _Alloc& __a,
1542 template<
typename _Alloc,
typename _U1,
typename _U2>
1543 requires __constructible<const _U1, const _U2>
1544 explicit(!__convertible<const _U1, const _U2>)
1546 tuple(allocator_arg_t __tag,
const _Alloc& __a,
1553 template<
typename _Alloc,
typename _U1,
typename _U2,
1554 _ImplicitCtor<true, const _U1&, const _U2&> =
true>
1555 _GLIBCXX20_CONSTEXPR
1556 tuple(allocator_arg_t __tag,
const _Alloc& __a,
1558 :
_Inherited(__tag, __a, __in.first, __in.second) { }
1560 template<
typename _Alloc,
typename _U1,
typename _U2,
1561 _ExplicitCtor<true, const _U1&, const _U2&> =
false>
1563 _GLIBCXX20_CONSTEXPR
1564 tuple(allocator_arg_t __tag,
const _Alloc& __a,
1566 :
_Inherited(__tag, __a, __in.first, __in.second) { }
1568 template<
typename _Alloc,
typename _U1,
typename _U2,
1569 _ImplicitCtor<true, _U1, _U2> =
true>
1570 _GLIBCXX20_CONSTEXPR
1572 :
_Inherited(__tag, __a, std::forward<_U1>(__in.first),
1573 std::forward<_U2>(__in.second)) { }
1575 template<
typename _Alloc,
typename _U1,
typename _U2,
1576 _ExplicitCtor<true, _U1, _U2> =
false>
1578 _GLIBCXX20_CONSTEXPR
1580 :
_Inherited(__tag, __a, std::forward<_U1>(__in.first),
1581 std::forward<_U2>(__in.second)) { }
1583#if __cplusplus > 202002L
1584 template<
typename _Alloc,
typename _U1,
typename _U2>
1585 requires __constructible<_U1&, _U2&>
1586 explicit(!__convertible<_U1&, _U2&>)
1588 tuple(allocator_arg_t __tag,
const _Alloc& __a,
1590 :
_Inherited(__tag, __a, __in.first, __in.second) { }
1592 template<
typename _Alloc,
typename _U1,
typename _U2>
1593 requires __constructible<const _U1, const _U2>
1594 explicit(!__convertible<const _U1, const _U2>)
1597 :
_Inherited(__tag, __a, std::forward<const _U1>(__in.first),
1598 std::forward<const _U2>(__in.second)) { }
1603 _GLIBCXX20_CONSTEXPR
1605 operator=(__conditional_t<__assignable<const _T1&, const _T2&>(),
1607 const __nonesuch&> __in)
1608 noexcept(__nothrow_assignable<const _T1&, const _T2&>())
1610 this->_M_assign(__in);
1614 _GLIBCXX20_CONSTEXPR
1616 operator=(__conditional_t<__assignable<_T1, _T2>(),
1619 noexcept(__nothrow_assignable<_T1, _T2>())
1625 template<
typename _U1,
typename _U2>
1626 _GLIBCXX20_CONSTEXPR
1627 __enable_if_t<__assignable<const _U1&, const _U2&>(),
tuple&>
1629 noexcept(__nothrow_assignable<const _U1&, const _U2&>())
1631 this->_M_assign(__in);
1635 template<
typename _U1,
typename _U2>
1636 _GLIBCXX20_CONSTEXPR
1637 __enable_if_t<__assignable<_U1, _U2>(),
tuple&>
1639 noexcept(__nothrow_assignable<_U1, _U2>())
1645#if __cplusplus > 202002L
1646 constexpr const tuple&
1647 operator=(
const tuple& __in)
const
1648 requires is_copy_assignable_v<const _T1> && is_copy_assignable_v<const _T2>
1650 this->_M_assign(__in);
1654 constexpr const tuple&
1655 operator=(
tuple&& __in)
const
1656 requires is_assignable_v<const _T1&, _T1> && is_assignable_v<const _T2, _T2>
1662 template<
typename _U1,
typename _U2>
1663 constexpr const tuple&
1665 requires is_assignable_v<const _T1&, const _U1&>
1666 && is_assignable_v<const _T2&, const _U2&>
1668 this->_M_assign(__in);
1672 template<
typename _U1,
typename _U2>
1673 constexpr const tuple&
1675 requires is_assignable_v<const _T1&, _U1>
1676 && is_assignable_v<const _T2&, _U2>
1683 template<
typename _U1,
typename _U2>
1684 _GLIBCXX20_CONSTEXPR
1685 __enable_if_t<__assignable<const _U1&, const _U2&>(),
tuple&>
1687 noexcept(__nothrow_assignable<const _U1&, const _U2&>())
1689 this->_M_head(*
this) = __in.first;
1690 this->_M_tail(*this)._M_head(*
this) = __in.second;
1694 template<
typename _U1,
typename _U2>
1695 _GLIBCXX20_CONSTEXPR
1696 __enable_if_t<__assignable<_U1, _U2>(),
tuple&>
1698 noexcept(__nothrow_assignable<_U1, _U2>())
1700 this->_M_head(*
this) = std::forward<_U1>(__in.first);
1701 this->_M_tail(*this)._M_head(*
this) = std::forward<_U2>(__in.second);
1705#if __cplusplus > 202002L
1706 template<
typename _U1,
typename _U2>
1707 constexpr const tuple&
1709 requires is_assignable_v<const _T1&, const _U1&>
1710 && is_assignable_v<const _T2&, const _U2&>
1712 this->_M_head(*
this) = __in.first;
1713 this->_M_tail(*this)._M_head(*
this) = __in.second;
1717 template<
typename _U1,
typename _U2>
1718 constexpr const tuple&
1720 requires is_assignable_v<const _T1&, _U1>
1721 && is_assignable_v<const _T2&, _U2>
1723 this->_M_head(*
this) = std::forward<_U1>(__in.first);
1724 this->_M_tail(*this)._M_head(*
this) = std::forward<_U2>(__in.second);
1729 _GLIBCXX20_CONSTEXPR
1732 noexcept(__and_<__is_nothrow_swappable<_T1>,
1733 __is_nothrow_swappable<_T2>>::value)
1734 { _Inherited::_M_swap(__in); }
1736#if __cplusplus > 202002L
1738 swap(
const tuple& __in)
const
1739 noexcept(__and_v<__is_nothrow_swappable<const _T1>,
1740 __is_nothrow_swappable<const _T2>>)
1741 requires is_swappable_v<const _T1> && is_swappable_v<const _T2>
1742 { _Inherited::_M_swap(__in); }