8#ifndef INCLUDED_BSLSTL_PAIR
9#define INCLUDED_BSLSTL_PAIR
312#include <bslscm_version.h>
321#ifndef BDE_OMIT_INTERNAL_DEPRECATED
358#if defined(BSLS_COMPILERFEATURES_FULL_CPP11)
362#ifdef BSLS_LIBRARYFEATURES_HAS_CPP20_CONCEPTS
370#if !defined(BSLS_COMPILERFEATURES_FULL_CPP11) \
371 || (defined(BSLS_PLATFORM_CMP_MSVC) \
372 && (BSLS_COMPILERFEATURES_CPLUSPLUS < 201703L \
373 || BSLS_PLATFORM_CMP_VERSION <= 1916))
382# define BSLSTL_PAIR_DO_NOT_SFINAE_TEST_IS_SWAPPABLE 1
411#if defined(BSLS_COMPILERFEATURES_FULL_CPP11) \
412 && !defined(BSLS_LIBRARYFEATURES_HAS_CPP14_INTEGER_SEQUENCE)
413# error piecewise constructors assume this essential machinery from C++14
422#if defined(BSLS_COMPILERFEATURES_FULL_CPP11)
430template <std::size_t... INTS>
431using Pair_IndexSequence = bslmf::IntegerSequence<std::size_t, INTS...>;
436template <std::
size_t N>
437using Pair_MakeIndexSequence = bslmf::MakeIntegerSequence<std::size_t, N>;
471 < !BloombergLP::bslma::UsesBslmaAllocator<TYPE>::value
472 , Pair_BslmaIdiomNone
474 bsl::conditional< BloombergLP::bslmf::UsesAllocatorArgT<TYPE>::value
475 , Pair_BslmaIdiomAllocatorArgT
476 , Pair_BslmaIdiomAtEnd
482#if defined(BSLS_COMPILERFEATURES_FULL_CPP11)
489template <
class TYPE,
class ... ARGS>
491 sizeof...(ARGS) + Pair_BslmaIdiom<TYPE>::value >
507#if defined(BSLS_COMPILERFEATURES_FULL_CPP11)
514 template <
class ... ARGS>
517 concatAllocator(std::tuple<ARGS...>&& tpl,
518 BloombergLP::bslma::Allocator* alloc,
527 template <
class ... ARGS>
529 std::tuple<ARGS..., BloombergLP::bslma::Allocator *>
530 concatAllocator(std::tuple<ARGS...>&& tpl,
531 BloombergLP::bslma::Allocator* alloc,
541 template <
class ... ARGS>
544 BloombergLP::bslma::Allocator *,
546 concatAllocator(std::tuple<ARGS...>&& tpl,
547 BloombergLP::bslma::Allocator* alloc,
551#if defined(BSLS_COMPILERFEATURES_FULL_CPP11) && \
552 defined(BSLSTL_PAIR_DO_NOT_SFINAE_TEST_IS_SWAPPABLE)
558 template <
class TYPE1,
class TYPE2>
559 static constexpr bool hasNothrowSwap()
562 using U = BloombergLP::bslmf::Util;
563 return noexcept(swap(U::declval<TYPE1&>(), U::declval<TYPE1&>())) &&
564 noexcept(swap(U::declval<TYPE2&>(), U::declval<TYPE2&>()));
621#if defined(BSLS_COMPILERFEATURES_SUPPORT_CONCEPTS)
625 requires std::is_default_constructible_v<TYPE>
632#elif defined(BSLS_COMPILERFEATURES_FULL_CPP11)
635 template <
class BSLSTL_DUMMY = TYPE,
636 class = bsl::enable_if_t<
637 std::is_default_constructible<BSLSTL_DUMMY>::value>>
678#if defined(BSLS_COMPILERFEATURES_FULL_CPP11)
679 template <
class PARAM,
680 class = bsl::enable_if_t<
684 template <
class PARAM>
686 template <
class PARAM>
704#if defined(BSLS_COMPILERFEATURES_FULL_CPP11)
705 template <
class PARAM>
707 BloombergLP::bslma::Allocator *basicAllocator,
709 template <
class PARAM>
711 BloombergLP::bslma::Allocator *basicAllocator,
713 template <
class PARAM>
715 BloombergLP::bslma::Allocator *basicAllocator,
718 template <
class PARAM>
720 BloombergLP::bslma::Allocator *basicAllocator,
722 template <
class PARAM>
724 BloombergLP::bslma::Allocator *basicAllocator,
726 template <
class PARAM>
728 BloombergLP::bslma::Allocator *basicAllocator,
730 template <
class PARAM>
732 BloombergLP::bslma::Allocator *basicAllocator,
734 template <
class PARAM>
736 BloombergLP::bslma::Allocator *basicAllocator,
738 template <
class PARAM>
740 BloombergLP::bslma::Allocator *basicAllocator,
744#if defined(BSLS_COMPILERFEATURES_FULL_CPP11)
751 template <
class ...ARGS,
size_t ...I>
753 BloombergLP::bslstl::Pair_IndexSequence<I...>);
781#if defined(BSLS_COMPILERFEATURES_FULL_CPP11)
791#if defined(BSLS_COMPILERFEATURES_FULL_CPP11)
792 template <
class PARAM,
class = bsl::enable_if_t<
793 std::is_constructible<TYPE, PARAM>::value>>
797 template <
class PARAM>
799 template <
class PARAM>
805#if defined(BSLS_COMPILERFEATURES_FULL_CPP11)
806 template <
class PARAM>
809 BloombergLP::bslma::Allocator *basicAllocator,
812 template <
class PARAM>
814 BloombergLP::bslma::Allocator *basicAllocator,
816 template <
class PARAM>
818 BloombergLP::bslma::Allocator *basicAllocator,
822#if defined(BSLS_COMPILERFEATURES_FULL_CPP11)
832 BloombergLP::bslstl::Pair_IndexSequence<0u>);
845#if defined(BSLS_COMPILERFEATURES_FULL_CPP11)
878 template <
class PARAM,
class = bsl::enable_if_t<
879 std::is_constructible<TYPE, PARAM>::value>>
885 template <
class PARAM>
888 BloombergLP::bslma::Allocator *basicAllocator,
891# if defined(BSLS_COMPILERFEATURES_FULL_CPP11)
901 BloombergLP::bslstl::Pair_IndexSequence<0u>);
967#if defined(BSLS_COMPILERFEATURES_SUPPORT_CONCEPTS)
971 requires std::is_default_constructible_v<TYPE>
978#elif defined(BSLS_COMPILERFEATURES_FULL_CPP11)
981 template <
class BSLSTL_DUMMY = TYPE,
982 class = bsl::enable_if_t<
983 std::is_default_constructible<BSLSTL_DUMMY>::value>>
1024#if defined(BSLS_COMPILERFEATURES_FULL_CPP11)
1025 template <
class PARAM,
1026 class = bsl::enable_if_t<
1028 bsl::remove_cvref_t<PARAM>>::value>>
1031 template <
class PARAM>
1033 template <
class PARAM>
1051#if defined(BSLS_COMPILERFEATURES_FULL_CPP11)
1052 template <
class PARAM>
1054 BloombergLP::bslma::Allocator *basicAllocator,
1056 template <
class PARAM>
1058 BloombergLP::bslma::Allocator *basicAllocator,
1060 template <
class PARAM>
1062 BloombergLP::bslma::Allocator *basicAllocator,
1065 template <
class PARAM>
1067 BloombergLP::bslma::Allocator *basicAllocator,
1069 template <
class PARAM>
1071 BloombergLP::bslma::Allocator *basicAllocator,
1073 template <
class PARAM>
1075 BloombergLP::bslma::Allocator *basicAllocator,
1077 template <
class PARAM>
1079 BloombergLP::bslma::Allocator *basicAllocator,
1081 template <
class PARAM>
1083 BloombergLP::bslma::Allocator *basicAllocator,
1085 template <
class PARAM>
1087 BloombergLP::bslma::Allocator *basicAllocator,
1091#if defined(BSLS_COMPILERFEATURES_FULL_CPP11)
1098 template <
class ...ARGS,
size_t ...I>
1100 BloombergLP::bslstl::Pair_IndexSequence<I...>);
1109template <
class TYPE>
1128#if defined(BSLS_COMPILERFEATURES_FULL_CPP11)
1138#if defined(BSLS_COMPILERFEATURES_FULL_CPP11)
1139 template <
class PARAM,
class = bsl::enable_if_t<
1140 std::is_constructible<TYPE, PARAM>::value>>
1144 template <
class PARAM>
1146 template <
class PARAM>
1152#if defined(BSLS_COMPILERFEATURES_FULL_CPP11)
1153 template <
class PARAM>
1156 BloombergLP::bslma::Allocator *basicAllocator,
1159 template <
class PARAM>
1161 BloombergLP::bslma::Allocator *basicAllocator,
1163 template <
class PARAM>
1165 BloombergLP::bslma::Allocator *basicAllocator,
1169#if defined(BSLS_COMPILERFEATURES_FULL_CPP11)
1176 template <
class ARG>
1179 BloombergLP::bslstl::Pair_IndexSequence<0u>);
1192#if defined(BSLS_COMPILERFEATURES_FULL_CPP11)
1198template <
class TYPE>
1225 template <
class PARAM,
class = bsl::enable_if_t<
1226 std::is_constructible<TYPE, PARAM>::value>>
1232 template <
class PARAM>
1235 BloombergLP::bslma::Allocator *basicAllocator,
1238# if defined(BSLS_COMPILERFEATURES_FULL_CPP11)
1245 template <
class ARG>
1248 BloombergLP::bslstl::Pair_IndexSequence<0u>);
1279template <
class T1,
class T2>
1293 typedef BloombergLP::bslmf::MovableRefUtil MovUtil;
1299 struct SfinaeEnable {};
1318#if defined(BSLS_COMPILERFEATURES_FULL_CPP11)
1319 constexpr pair() =
default;
1323 explicit pair(BloombergLP::bslma::Allocator *basicAllocator);
1344 pair(
const pair& original, BloombergLP::bslma::Allocator *basicAllocator);
1346#if defined(BSLS_COMPILERFEATURES_FULL_CPP11)
1363 pair(
pair&& original, BloombergLP::bslma::Allocator *basicAllocator);
1373 pair(BloombergLP::bslmf::MovableRef<pair> original);
1374 pair(BloombergLP::bslmf::MovableRef<pair> original,
1375 BloombergLP::bslma::Allocator *basicAllocator);
1390 BloombergLP::bslma::Allocator *basicAllocator);
1400#if defined(BSLS_COMPILERFEATURES_FULL_CPP11)
1401 template <
class PARAM_1,
1403 class = bsl::enable_if_t<
1404 std::is_constructible<T1, PARAM_1>::value &&
1405 std::is_constructible<T2, PARAM_2>::value &&
1408 BloombergLP::bslma::Allocator *>::value)>
1410 constexpr pair(PARAM_1&& a, PARAM_2&& b);
1411 template <
class PARAM_1,
class PARAM_2>
1414 BloombergLP::bslma::Allocator *basicAllocator);
1416 template <
class PARAM_1,
class PARAM_2>
1425 BloombergLP::bslma::Allocator *>::value),
1426 SfinaeEnable>::type = SfinaeEnable())
1434 template <
class PARAM_1,
class PARAM_2>
1437 BloombergLP::bslma::Allocator *basicAllocator);
1439 template <
class PARAM_1,
class PARAM_2>
1448 BloombergLP::bslma::Allocator *>::value),
1449 SfinaeEnable>::type = SfinaeEnable())
1457 template <
class PARAM_1,
class PARAM_2>
1460 BloombergLP::bslma::Allocator *basicAllocator);
1462 template <
class PARAM_1,
class PARAM_2>
1471 BloombergLP::bslma::Allocator *>::value),
1472 SfinaeEnable>::type = SfinaeEnable())
1480 template <
class PARAM_1,
class PARAM_2>
1483 BloombergLP::bslma::Allocator *basicAllocator);
1485 template <
class PARAM_1,
class PARAM_2>
1494 BloombergLP::bslma::Allocator *>::value),
1495 SfinaeEnable>::type = SfinaeEnable())
1503 template <
class PARAM_1,
class PARAM_2>
1506 BloombergLP::bslma::Allocator *basicAllocator);
1516#if defined(BSLS_COMPILERFEATURES_FULL_CPP11)
1517 template <
class PARAM_1,
class PARAM_2,
1518 class = bsl::enable_if_t<
1519 std::is_constructible<T1, const PARAM_1&>::value &&
1520 std::is_constructible<T2, const PARAM_2&>::value>>
1522 template <
class PARAM_1,
class PARAM_2,
1523 class = bsl::enable_if_t<
1524 std::is_constructible<T1, const PARAM_1&>::value &&
1525 std::is_constructible<T2, const PARAM_2&>::value>>
1526 constexpr pair(
const std::pair<PARAM_1, PARAM_2>& other);
1528 template <
class PARAM_1,
class PARAM_2>
1530 template <
class PARAM_1,
class PARAM_2>
1531 pair(
const std::pair<PARAM_1, PARAM_2>& other);
1533 template <
class PARAM_1,
class PARAM_2>
1535 BloombergLP::bslma::Allocator *basicAllocator);
1536 template <
class PARAM_1,
class PARAM_2>
1537 pair(
const std::pair<PARAM_1, PARAM_2>& other,
1538 BloombergLP::bslma::Allocator *basicAllocator);
1547#if defined(BSLS_COMPILERFEATURES_FULL_CPP11)
1548 template <
class PARAM_1,
class PARAM_2,
1549 class = bsl::enable_if_t<bsl::is_convertible<PARAM_1, T1>::value
1553 template <
class PARAM_1,
class PARAM_2,
1554 class = bsl::enable_if_t<bsl::is_convertible<PARAM_1, T1>::value
1557 constexpr pair(std::pair<PARAM_1, PARAM_2>&& other);
1558 template <
class PARAM_1,
class PARAM_2>
1560 BloombergLP::bslma::Allocator *basicAllocator);
1561 template <
class PARAM_1,
class PARAM_2>
1562 pair(std::pair<PARAM_1, PARAM_2>&& other,
1563 BloombergLP::bslma::Allocator *basicAllocator);
1565 template <
class PARAM_1,
class PARAM_2>
1569 SfinaeEnable>::type = SfinaeEnable())
1579 template <
class PARAM_1,
class PARAM_2>
1580 pair(BloombergLP::bslmf::MovableRef<std::pair<PARAM_1, PARAM_2> > other,
1583 SfinaeEnable>::type = SfinaeEnable())
1592 template <
class PARAM_1,
class PARAM_2>
1595 BloombergLP::bslma::Allocator *basicAllocator);
1596 template <
class PARAM_1,
class PARAM_2>
1597 pair(BloombergLP::bslmf::MovableRef<std::pair<PARAM_1, PARAM_2> > other,
1598 BloombergLP::bslma::Allocator *basicAllocator);
1601#if defined(BSLS_COMPILERFEATURES_FULL_CPP11)
1615 template<
class ...ARGS_1,
class ...ARGS_2>
1616 pair(std::piecewise_construct_t,
1617 std::tuple<ARGS_1...> first_args,
1618 std::tuple<ARGS_2...> second_args);
1619 template<
class ...ARGS_1,
class ...ARGS_2>
1620 pair(std::piecewise_construct_t,
1621 std::tuple<ARGS_1...> first_args,
1622 std::tuple<ARGS_2...> second_args,
1623 BloombergLP::bslma::Allocator *basicAllocator);
1626#ifndef BDE_OMIT_INTERNAL_DEPRECATED
1631 template <
class PARAM_1,
class PARAM_2>
1633 pair(
const BloombergLP::bslma::ManagedPtr_PairProxy<PARAM_1, PARAM_2>&
1656#if defined(BSLS_COMPILERFEATURES_FULL_CPP14)
1659 template <
class PARAM_1,
class PARAM_2,
1660 class = bsl::enable_if_t<std::is_assignable<T1&, const PARAM_1>::value
1661 && std::is_assignable<T2&, const PARAM_2>::value>
1666 template <
class PARAM_1,
class PARAM_2>
1678 template <
class PARAM_1,
class PARAM_2>
1682#if defined(BSLS_COMPILERFEATURES_FULL_CPP11)
1696 template <
class PARAM_1,
class PARAM_2>
1706 pair& operator=(BloombergLP::bslmf::MovableRef<pair> rhs);
1713 template <
class PARAM_1,
class PARAM_2>
1718#if defined(BSLS_COMPILERFEATURES_FULL_CPP11)
1721 template <
class PARAM_1,
class PARAM_2,
1722 class = bsl::enable_if_t<bsl::is_convertible<T1, PARAM_1>::value
1725 operator std::tuple<PARAM_1&, PARAM_2&>() noexcept;
1731 template <class PARAM_1,
1734 operator
std::tuple<PARAM_1&, decltype(
std::ignore)&>() noexcept;
1740 template <class PARAM_2,
1743 operator
std::tuple<decltype(
std::ignore)&, PARAM_2&>() noexcept;
1752 operator
std::tuple<decltype(
std::ignore)&,
1753 decltype(
std::ignore)&>() noexcept
1755 return std::tuple<
decltype(std::ignore)&,
1756 decltype(std::ignore)&>(std::ignore,
1766#if defined(BSLSTL_PAIR_DO_NOT_SFINAE_TEST_IS_SWAPPABLE)
1768 Pair_ImpUtil::hasNothrowSwap<T1, T2>());
1770 void swap(
pair& other)
noexcept(bsl::is_nothrow_swappable<T1>::value &&
1771 bsl::is_nothrow_swappable<T2>::value);
1775#ifdef BSLS_COMPILERFEATURES_SUPPORT_CTAD
1787template <
class T1,
class T2>
1788pair(T1, T2) -> pair<T1, T2>;
1798 class = bsl::enable_if_t<
1799 bsl::is_convertible_v<ALLOC *, BloombergLP::bslma::Allocator *>>
1801pair(T1, T2, ALLOC *) -> pair<T1, T2>;
1811 class = bsl::enable_if_t<
1812 bsl::is_convertible_v<ALLOC *, BloombergLP::bslma::Allocator *>>
1814pair(pair<T1, T2>, ALLOC *) -> pair<T1, T2>;
1818template <
class T1,
class T2>
1819pair(std::pair<T1, T2>) -> pair<T1, T2>;
1829 class = bsl::enable_if_t<
1830 bsl::is_convertible_v<ALLOC *, BloombergLP::bslma::Allocator *>>
1832pair(std::pair<T1, T2>, ALLOC *) -> pair<T1, T2>;
1841template <
class T1,
class T2>
1844bool operator==(
const pair<T1, T2>&
lhs,
const pair<T1, T2>&
rhs);
1846#if !defined(BSLS_COMPILERFEATURES_SUPPORT_THREE_WAY_COMPARISON)
1851template <
class T1,
class T2>
1854bool operator!=(
const pair<T1, T2>&
lhs,
const pair<T1, T2>&
rhs);
1857#if defined(BSLALG_SYNTHTHREEWAYUTIL_AVAILABLE)
1862template <
class T1,
class T2>
1864std::common_comparison_category_t<
1865 BloombergLP::bslalg::SynthThreeWayUtil::Result<T1>,
1866 BloombergLP::bslalg::SynthThreeWayUtil::Result<T2>
1867> operator<=>(
const pair<T1, T2>&
lhs,
const pair<T1, T2>&
rhs);
1878template <
class T1,
class T2>
1881bool operator<(
const pair<T1, T2>&
lhs,
const pair<T1, T2>&
rhs);
1887template <
class T1,
class T2>
1890bool operator>(
const pair<T1, T2>&
lhs,
const pair<T1, T2>&
rhs);
1896template <
class T1,
class T2>
1899bool operator<=(
const pair<T1, T2>&
lhs,
const pair<T1, T2>&
rhs);
1905template <
class T1,
class T2>
1908bool operator>=(
const pair<T1, T2>&
lhs,
const pair<T1, T2>&
rhs);
1918template <
class T1,
class T2>
1919#if defined(BSLSTL_PAIR_DO_NOT_SFINAE_TEST_IS_SWAPPABLE)
1920void swap(pair<T1, T2>& a, pair<T1, T2>& b)
1923bsl::enable_if_t<bsl::is_swappable<T1>::value && bsl::is_swappable<T2>::value>
1924swap(pair<T1, T2>& a, pair<T1, T2>& b)
noexcept(
noexcept(a.swap(b)));
1930template <
class HASHALG,
class T1,
class T2>
1931void hashAppend(HASHALG& hashAlg,
const pair<T1, T2>& input);
1935#if defined(BSLS_COMPILERFEATURES_FULL_CPP11)
1939# if defined(BSLS_PLATFORM_CMP_CLANG)
1940# pragma clang diagnostic push
1941# pragma clang diagnostic ignored "-Wmismatched-tags"
1950template<
class T1,
class T2>
1951struct tuple_element<0,
bsl::pair<T1, T2> >
1959template<
class T1,
class T2>
1960struct tuple_element<1,
bsl::pair<T1, T2> >
1972template<
class T1,
class T2>
1973struct tuple_size<
bsl::pair<T1, T2> > : integral_constant<size_t, 2>
1976# if defined(BSLS_PLATFORM_CMP_CLANG)
1977# pragma clang diagnostic pop
1991template <std::
size_t INDEX,
class T1,
class T2>
1992struct Pair_GetImpUtil
1994 static_assert(INDEX < 2,
"Element index does not exist");
1999template <
class T1,
class T2>
2000struct Pair_GetImpUtil<0, T1, T2>
2024template <
class T1,
class T2>
2025struct Pair_GetImpUtil<1u, T1, T2>
2050template <
class T,
class T1,
class T2>
2051struct Pair_IndexOfType
2056template <
class T1,
class T2>
2062template <
class T1,
class T2>
2077template<std::
size_t INDEX,
class T1,
class T2>
2078typename std::tuple_element<INDEX, bsl::pair<T1, T2> >::type&
2085template<std::
size_t INDEX,
class T1,
class T2>
2086const typename std::tuple_element<INDEX, bsl::pair<T1, T2> >::type&
2093template<std::
size_t INDEX,
class T1,
class T2>
2094typename std::tuple_element<INDEX, bsl::pair<T1, T2> >::type&&
2101template<
class TYPE,
class T1,
class T2>
2108template<
class TYPE,
class T1,
class T2>
2115template<
class TYPE,
class T1,
class T2>
2122template<
class TYPE,
class T1,
class T2>
2139#if defined(BSLS_COMPILERFEATURES_FULL_CPP11)
2140template <
class ... ARGS>
2143Pair_ImpUtil::concatAllocator(
2144 std::tuple<ARGS...>&& tpl,
2145 BloombergLP::bslma::Allocator *,
2148 return std::move(tpl);
2151template <
class ... ARGS>
2153std::tuple<ARGS..., BloombergLP::bslma::Allocator *>
2154Pair_ImpUtil::concatAllocator(
2155 std::tuple<ARGS...>&& tpl,
2156 BloombergLP::bslma::Allocator *alloc,
2159 return std::tuple_cat(std::move(tpl), std::tie(alloc));
2162template <
class ... ARGS>
2165 BloombergLP::bslma::Allocator *,
2167Pair_ImpUtil::concatAllocator(
2168 std::tuple<ARGS...>&& tpl,
2169 BloombergLP::bslma::Allocator *alloc,
2172 return std::tuple_cat(std::tie(bsl::allocator_arg, alloc), std::move(tpl));
2181#if !defined(BSLS_COMPILERFEATURES_FULL_CPP11)
2182template <
class TYPE>
2190template <
class TYPE>
2198template <
class TYPE>
2202: first(basicAllocator)
2206template <
class TYPE>
2210: first(
bsl::allocator_arg, basicAllocator)
2214template <
class TYPE>
2223#if defined(BSLS_COMPILERFEATURES_FULL_CPP11)
2224template <
class TYPE>
2225template <
class PARAM,
class>
2228: first(
std::forward<PARAM>(value))
2232template <
class TYPE>
2233template <
class PARAM>
2240template <
class TYPE>
2241template <
class PARAM>
2249#if defined(BSLS_COMPILERFEATURES_FULL_CPP11)
2250template <
class TYPE>
2251template <
class PARAM>
2254 BloombergLP::bslma::Allocator *,
2256: first(
std::forward<PARAM>(value))
2260template <
class TYPE>
2261template <
class PARAM>
2264 BloombergLP::bslma::Allocator *basicAllocator,
2266: first(
std::forward<PARAM>(value), basicAllocator)
2270template <
class TYPE>
2271template <
class PARAM>
2274 BloombergLP::bslma::Allocator *basicAllocator,
2276: first(
bsl::allocator_arg, basicAllocator,
std::forward<PARAM>(value))
2280template <
class TYPE>
2281template <
class PARAM>
2284 BloombergLP::bslma::Allocator *,
2290template <
class TYPE>
2291template <
class PARAM>
2294 BloombergLP::bslma::Allocator *,
2300template <
class TYPE>
2301template <
class PARAM>
2304 BloombergLP::bslma::Allocator *basicAllocator,
2306: first(value, basicAllocator)
2310template <
class TYPE>
2311template <
class PARAM>
2314 BloombergLP::bslma::Allocator *basicAllocator,
2316: first(value, basicAllocator)
2320template <
class TYPE>
2321template <
class PARAM>
2324 BloombergLP::bslma::Allocator *basicAllocator,
2326: first(
bsl::allocator_arg, basicAllocator, value)
2330template <
class TYPE>
2331template <
class PARAM>
2334 BloombergLP::bslma::Allocator *basicAllocator,
2336: first(
bsl::allocator_arg, basicAllocator, value)
2341#if defined(BSLS_COMPILERFEATURES_FULL_CPP11)
2342template <
class TYPE>
2343template <
class ...ARGS,
size_t ...I>
2346 BloombergLP::bslstl::Pair_IndexSequence<I...>)
2347: first(
std::
get<I>(
std::move(argsPack))...)
2358template <
class TYPE>
2366#if defined(BSLS_COMPILERFEATURES_FULL_CPP11)
2367template <
class TYPE>
2368template <
class PARAM,
class>
2371: first(
std::forward<PARAM>(value))
2375template <
class TYPE>
2376template <
class PARAM>
2383template <
class TYPE>
2384template <
class PARAM>
2392#if defined(BSLS_COMPILERFEATURES_FULL_CPP11)
2393template <
class TYPE>
2394template <
class PARAM>
2397 BloombergLP::bslma::Allocator *,
2399: first(
std::forward<PARAM>(value))
2403template <
class TYPE>
2404template <
class PARAM>
2407 BloombergLP::bslma::Allocator *,
2413template <
class TYPE>
2414template <
class PARAM>
2417 BloombergLP::bslma::Allocator *,
2424#if defined(BSLS_COMPILERFEATURES_FULL_CPP11)
2425template <
class TYPE>
2429 BloombergLP::bslstl::Pair_IndexSequence<0u>)
2430: first(
std::
get<0u>(arg))
2437template <
class TYPE>
2446#if defined(BSLS_COMPILERFEATURES_FULL_CPP11)
2453template <
class TYPE>
2456: first(
std::move(value))
2460template <
class TYPE>
2461template <
class PARAM,
class>
2464: first(
std::forward<PARAM>(value))
2468template <
class TYPE>
2469template <
class PARAM>
2472 BloombergLP::bslma::Allocator *,
2474: first(
std::forward<PARAM>(value))
2478# if defined(BSLS_COMPILERFEATURES_FULL_CPP11)
2479template <
class TYPE>
2483 BloombergLP::bslstl::Pair_IndexSequence<0u>)
2484: first(
std::
get<0u>(arg))
2490template <
class TYPE>
2505#if !defined(BSLS_COMPILERFEATURES_FULL_CPP11)
2506template <
class TYPE>
2514template <
class TYPE>
2522template <
class TYPE>
2526: second(basicAllocator)
2530template <
class TYPE>
2534: second(
bsl::allocator_arg, basicAllocator)
2538template <
class TYPE>
2547#if defined(BSLS_COMPILERFEATURES_FULL_CPP11)
2548template <
class TYPE>
2549template <
class PARAM,
class>
2552: second(
std::forward<PARAM>(value))
2556template <
class TYPE>
2557template <
class PARAM>
2563template <
class TYPE>
2564template <
class PARAM>
2572#if defined(BSLS_COMPILERFEATURES_FULL_CPP11)
2573template <
class TYPE>
2574template <
class PARAM>
2577 BloombergLP::bslma::Allocator *,
2579: second(
std::forward<PARAM>(value))
2583template <
class TYPE>
2584template <
class PARAM>
2587 BloombergLP::bslma::Allocator *basicAllocator,
2589: second(
std::forward<PARAM>(value), basicAllocator)
2593template <
class TYPE>
2594template <
class PARAM>
2597 BloombergLP::bslma::Allocator *basicAllocator,
2599: second(
bsl::allocator_arg, basicAllocator,
std::forward<PARAM>(value))
2603template <
class TYPE>
2604template <
class PARAM>
2607 BloombergLP::bslma::Allocator *,
2613template <
class TYPE>
2614template <
class PARAM>
2617 BloombergLP::bslma::Allocator *,
2623template <
class TYPE>
2624template <
class PARAM>
2627 BloombergLP::bslma::Allocator *basicAllocator,
2629: second(value, basicAllocator)
2633template <
class TYPE>
2634template <
class PARAM>
2637 BloombergLP::bslma::Allocator *basicAllocator,
2639: second(value, basicAllocator)
2643template <
class TYPE>
2644template <
class PARAM>
2647 BloombergLP::bslma::Allocator *basicAllocator,
2649: second(
bsl::allocator_arg, basicAllocator, value)
2653template <
class TYPE>
2654template <
class PARAM>
2657 BloombergLP::bslma::Allocator *basicAllocator,
2659: second(
bsl::allocator_arg, basicAllocator, value)
2664#if defined(BSLS_COMPILERFEATURES_FULL_CPP11)
2665template <
class TYPE>
2666template <
class ...ARGS,
size_t ...I>
2669 BloombergLP::bslstl::Pair_IndexSequence<I...>)
2670: second(
std::
get<I>(
std::move(argsPack))...)
2680template <
class TYPE>
2688#if defined(BSLS_COMPILERFEATURES_FULL_CPP11)
2689template <
class TYPE>
2690template <
class PARAM,
class>
2693: second(
std::forward<PARAM>(value))
2697template <
class TYPE>
2698template <
class PARAM>
2705template <
class TYPE>
2706template <
class PARAM>
2714#if defined(BSLS_COMPILERFEATURES_FULL_CPP11)
2715template <
class TYPE>
2716template <
class PARAM>
2719 BloombergLP::bslma::Allocator *,
2721: second(
std::forward<PARAM>(value))
2725template <
class TYPE>
2726template <
class PARAM>
2729 BloombergLP::bslma::Allocator *,
2735template <
class TYPE>
2736template <
class PARAM>
2739 BloombergLP::bslma::Allocator *,
2746#if defined(BSLS_COMPILERFEATURES_FULL_CPP11)
2747template <
class TYPE>
2751 BloombergLP::bslstl::Pair_IndexSequence<0u>)
2752: second(
std::
get<0u>(arg))
2758template <
class TYPE>
2768#if defined(BSLS_COMPILERFEATURES_FULL_CPP11)
2774template <
class TYPE>
2777: second(
std::move(value))
2781template <
class TYPE>
2782template <
class PARAM,
class>
2785: second(
std::forward<PARAM>(value))
2789template <
class TYPE>
2790template <
class PARAM>
2793 BloombergLP::bslma::Allocator *,
2795: second(
std::forward<PARAM>(value))
2799# if defined(BSLS_COMPILERFEATURES_FULL_CPP11)
2800template <
class TYPE>
2804 BloombergLP::bslstl::Pair_IndexSequence<0u>)
2805: second(
std::
get<0u>(arg))
2811template <
class TYPE>
2825#if !defined(BSLS_COMPILERFEATURES_FULL_CPP11)
2826template <
class T1,
class T2>
2835template <
class T1,
class T2>
2843template <
class T1,
class T2>
2853template <
class T1,
class T2>
2858 BloombergLP::bslma::Allocator *basicAllocator)
2864#if defined(BSLS_COMPILERFEATURES_FULL_CPP11)
2865template <
class T1,
class T2>
2866template <
class PARAM_1,
class PARAM_2,
class>
2869: FirstBase(
std::forward<PARAM_1>(a))
2870, SecondBase(
std::forward<PARAM_2>(b))
2874template <
class T1,
class T2>
2875template <
class PARAM_1,
class PARAM_2>
2879 BloombergLP::bslma::Allocator *basicAllocator)
2880: FirstBase(
std::forward<PARAM_1>(a), basicAllocator, FirstBslmaIdiom())
2881, SecondBase(
std::forward<PARAM_2>(b), basicAllocator, SecondBslmaIdiom())
2885template <
class T1,
class T2>
2886template <
class PARAM_1,
class PARAM_2>
2890 BloombergLP::bslma::Allocator *basicAllocator)
2896template <
class T1,
class T2>
2897template <
class PARAM_1,
class PARAM_2>
2901 BloombergLP::bslma::Allocator *basicAllocator)
2907template <
class T1,
class T2>
2908template <
class PARAM_1,
class PARAM_2>
2912 BloombergLP::bslma::Allocator *basicAllocator)
2918template <
class T1,
class T2>
2919template <
class PARAM_1,
class PARAM_2>
2923 BloombergLP::bslma::Allocator *basicAllocator)
2930#if defined(BSLS_COMPILERFEATURES_FULL_CPP11)
2931template <
class T1,
class T2>
2932template<
class ...ARGS_1,
class ...ARGS_2>
2935 std::tuple<ARGS_1...> first_args,
2936 std::tuple<ARGS_2...> second_args)
2937: FirstBase(
std::move(first_args),
2938 BloombergLP::
bslstl::Pair_MakeIndexSequence<
2939 std::tuple_size<
std::tuple<ARGS_1...> >::value
2941, SecondBase(
std::move(second_args),
2942 BloombergLP::
bslstl::Pair_MakeIndexSequence<
2943 std::tuple_size<
std::tuple<ARGS_2...> >::value
2948template <
class T1,
class T2>
2949template<
class ...ARGS_1,
class ...ARGS_2>
2952 std::tuple<ARGS_1...> first_args,
2953 std::tuple<ARGS_2...> second_args,
2954 BloombergLP::bslma::Allocator *basicAllocator)
2955: FirstBase(Pair_ImpUtil::concatAllocator(
std::move(first_args),
2958 BloombergLP::
bslstl::Pair_MakeIndexSequence<
2959 Pair_ConstructionParametersPackLength<T1, ARGS_1...>::value>())
2960, SecondBase(Pair_ImpUtil::concatAllocator(
std::move(second_args),
2962 SecondBslmaIdiom()),
2963 BloombergLP::
bslstl::Pair_MakeIndexSequence<
2964 Pair_ConstructionParametersPackLength<T2, ARGS_2...>::value>())
2969template <
class T1,
class T2>
2972 BloombergLP::bslma::Allocator *basicAllocator)
2978#if defined (BSLS_COMPILERFEATURES_FULL_CPP11)
2979template <
class T1,
class T2>
2982 BloombergLP::bslma::Allocator *basicAllocator)
2983: FirstBase(
std::forward<T1>(original.first),
2986, SecondBase(
std::forward<T2>(original.second),
2992template <
class T1,
class T2>
2995:
FirstBase(MovUtil::move(MovUtil::access(original).first))
2996,
SecondBase(MovUtil::move(MovUtil::access(original).second))
3000template <
class T1,
class T2>
3003 BloombergLP::bslma::Allocator *basicAllocator)
3004:
FirstBase(MovUtil::move(MovUtil::access(original).first),
3007,
SecondBase(MovUtil::move(MovUtil::access(original).second),
3014#if defined(BSLS_COMPILERFEATURES_FULL_CPP11)
3015template <
class T1,
class T2>
3016template <
class PARAM_1,
class PARAM_2,
class>
3019: FirstBase(other.first)
3020, SecondBase(other.second)
3024template <
class T1,
class T2>
3025template <
class PARAM_1,
class PARAM_2,
class>
3028: FirstBase(other.first)
3029, SecondBase(other.second)
3033template <
class T1,
class T2>
3034template <
class PARAM_1,
class PARAM_2>
3042template <
class T1,
class T2>
3043template <
class PARAM_1,
class PARAM_2>
3052template <
class T1,
class T2>
3053template <
class PARAM_1,
class PARAM_2>
3056 BloombergLP::bslma::Allocator *basicAllocator)
3062template <
class T1,
class T2>
3063template <
class PARAM_1,
class PARAM_2>
3066 BloombergLP::bslma::Allocator *basicAllocator)
3072#if defined(BSLS_COMPILERFEATURES_FULL_CPP11)
3073template <
class T1,
class T2>
3074template <
class PARAM_1,
class PARAM_2,
class>
3076: FirstBase(
std::move(other.first))
3077, SecondBase(
std::move(other.second))
3081template <
class T1,
class T2>
3082template <
class PARAM_1,
class PARAM_2,
class>
3084: FirstBase(
std::move(other.first))
3085, SecondBase(
std::move(other.second))
3089template <
class T1,
class T2>
3090template <
class PARAM_1,
class PARAM_2>
3092 BloombergLP::bslma::Allocator *basicAllocator)
3093: FirstBase(
std::move(other.first), basicAllocator, FirstBslmaIdiom())
3094, SecondBase(
std::move(other.second), basicAllocator, SecondBslmaIdiom())
3098template <
class T1,
class T2>
3099template <
class PARAM_1,
class PARAM_2>
3101 BloombergLP::bslma::Allocator *basicAllocator)
3102: FirstBase(
std::move(other.first), basicAllocator, FirstBslmaIdiom())
3103, SecondBase(
std::move(other.second), basicAllocator, SecondBslmaIdiom())
3107template <
class T1,
class T2>
3108template <
class PARAM_1,
class PARAM_2>
3111 BloombergLP::bslma::Allocator *basicAllocator)
3112:
FirstBase(MovUtil::move(MovUtil::access(other).first),
3115,
SecondBase(MovUtil::move(MovUtil::access(other).second),
3121template <
class T1,
class T2>
3122template <
class PARAM_1,
class PARAM_2>
3124 BloombergLP::bslmf::MovableRef<std::pair<PARAM_1, PARAM_2> > other,
3125 BloombergLP::bslma::Allocator *basicAllocator)
3126:
FirstBase(MovUtil::move(MovUtil::access(other).first),
3129,
SecondBase(MovUtil::move(MovUtil::access(other).second),
3136#ifndef BDE_OMIT_INTERNAL_DEPRECATED
3137template <
class T1,
class T2>
3138template <
class PARAM_1,
class PARAM_2>
3141 const BloombergLP::bslma::ManagedPtr_PairProxy<PARAM_1, PARAM_2>&
rhs)
3149#if !defined(BSLS_COMPILERFEATURES_FULL_CPP11)
3150template <
class T1,
class T2>
3154 first = MovUtil::move(lvalue.
first);
3155 second = MovUtil::move(lvalue.
second);
3162#if defined(BSLS_COMPILERFEATURES_FULL_CPP14)
3163template <
class T1,
class T2>
3164template <
class PARAM_1,
class PARAM_2,
class>
3169 second =
rhs.second;
3173template <
class T1,
class T2>
3174template <
class PARAM_1,
class PARAM_2>
3179 second =
rhs.second;
3184#if defined(BSLS_COMPILERFEATURES_FULL_CPP11)
3185template <
class T1,
class T2>
3186template <
class PARAM_1,
class PARAM_2>
3190 first = std::move(
rhs.first);
3191 second = std::move(
rhs.second);
3195template <
class T1,
class T2>
3196template <
class PARAM_1,
class PARAM_2>
3201 first = MovUtil::move(lvalue.
first);
3202 second = MovUtil::move(lvalue.
second);
3207template <
class T1,
class T2>
3208template <
class PARAM_1,
class PARAM_2>
3214 second =
rhs.second;
3218#if defined(BSLS_COMPILERFEATURES_FULL_CPP11)
3219template <
class T1,
class T2>
3220template <
class PARAM_1,
class PARAM_2,
class>
3224 return std::tuple<PARAM_1&, PARAM_2&>(first, second);
3227template <
class T1,
class T2>
3228template <
class PARAM_1,
class>
3230pair<T1, T2>::operator std::tuple<PARAM_1&, decltype(std::ignore)&>() noexcept
3232 return std::tuple<PARAM_1&, decltype(std::ignore)&>(first, std::ignore);
3235template <
class T1,
class T2>
3236template <
class PARAM_2,
class>
3238pair<T1, T2>::operator std::tuple<decltype(std::ignore)&, PARAM_2&>() noexcept
3240 return std::tuple<decltype(std::ignore)&, PARAM_2&>(std::ignore, second);
3245template <
class T1,
class T2>
3247#if defined(BSLSTL_PAIR_DO_NOT_SFINAE_TEST_IS_SWAPPABLE)
3248void pair<T1, T2>::swap(pair& other)
3251void pair<T1, T2>::swap(pair& other)
3252 noexcept(bsl::is_nothrow_swappable<T1>::value &&
3253 bsl::is_nothrow_swappable<T2>::value)
3261 swap(first, other.first);
3262 swap(second, other.second);
3266template <
class T1,
class T2>
3271 return lhs.first ==
rhs.first &&
lhs.second ==
rhs.second;
3274#if !defined(BSLS_COMPILERFEATURES_SUPPORT_THREE_WAY_COMPARISON)
3275template <
class T1,
class T2>
3284#if defined(BSLALG_SYNTHTHREEWAYUTIL_AVAILABLE)
3286template <
class T1,
class T2>
3288std::common_comparison_category_t<
3289 BloombergLP::bslalg::SynthThreeWayUtil::Result<T1>,
3290 BloombergLP::bslalg::SynthThreeWayUtil::Result<T2>
3291> operator<=>(
const pair<T1, T2>&
lhs,
const pair<T1, T2>&
rhs)
3293 using BloombergLP::bslalg::SynthThreeWayUtil;
3294 auto result = SynthThreeWayUtil::compare(
lhs.first,
rhs.first);
3295 return result == 0 ? SynthThreeWayUtil::compare(
lhs.second,
rhs.second)
3301template <
class T1,
class T2>
3306 return (
lhs.first <
rhs.first ?
true :
3307 rhs.first <
lhs.first ? false :
3308 lhs.second <
rhs.second);
3311template <
class T1,
class T2>
3319template <
class T1,
class T2>
3327template <
class T1,
class T2>
3338template <
class T1,
class T2>
3340#if defined(BSLSTL_PAIR_DO_NOT_SFINAE_TEST_IS_SWAPPABLE)
3347bsl::enable_if_t<bsl::is_swappable<T1>::value && bsl::is_swappable<T2>::value>
3348swap(pair<T1, T2>& a, pair<T1, T2>& b)
noexcept(
noexcept(a.swap(b)))
3355template <
class HASHALG,
class T1,
class T2>
3358 using ::BloombergLP::bslh::hashAppend;
3365#if defined(BSLS_COMPILERFEATURES_FULL_CPP11)
3374template <
class T1,
class T2>
3381template <
class T1,
class T2>
3389template <
class T1,
class T2>
3394 return std::move(p.first);
3397template <
class T1,
class T2>
3403 return std::move(p.first);
3406template <
class T1,
class T2>
3413template <
class T1,
class T2>
3422template <
class T1,
class T2>
3427 return std::move(p.second);
3430template <
class T1,
class T2>
3436 return std::move(p.second);
3443template<std::
size_t INDEX,
class T1,
class T2>
3445typename std::tuple_element<INDEX, bsl::pair<T1, T2> >::type&
3448 return BloombergLP::bslstl::Pair_GetImpUtil<INDEX, T1, T2>::getPairElement(
3452template<std::
size_t INDEX,
class T1,
class T2>
3454const typename std::tuple_element<INDEX, bsl::pair<T1, T2> >::type&
3457 return BloombergLP::bslstl::Pair_GetImpUtil<INDEX, T1, T2>::getPairElement(
3461template<std::
size_t INDEX,
class T1,
class T2>
3463typename std::tuple_element<INDEX, bsl::pair<T1, T2> >::type&&
3466 return BloombergLP::bslstl::Pair_GetImpUtil<INDEX, T1, T2>::getPairElement(
3470template<
class TYPE,
class T1,
class T2>
3474 return BloombergLP::bslstl::Pair_GetImpUtil<
3475 BloombergLP::bslstl::Pair_IndexOfType<TYPE, T1, T2>::value, T1, T2>
3476 ::getPairElement(p);
3479template<
class TYPE,
class T1,
class T2>
3483 return BloombergLP::bslstl::Pair_GetImpUtil<
3484 BloombergLP::bslstl::Pair_IndexOfType<TYPE, T1, T2>::value, T1, T2>
3485 ::getPairElement(p);
3488template<
class TYPE,
class T1,
class T2>
3492 return BloombergLP::bslstl::Pair_GetImpUtil<
3493 BloombergLP::bslstl::Pair_IndexOfType<TYPE, T1, T2>::value, T1, T2>
3494 ::getPairElement(std::move(p));
3497template<
class TYPE,
class T1,
class T2>
3501 return BloombergLP::bslstl::Pair_GetImpUtil<
3502 BloombergLP::bslstl::Pair_IndexOfType<TYPE, T1, T2>::value, T1, T2>
3503 ::getPairElement(std::move(p));
3513template <
class T1,
class T2>
3516 && is_trivially_copyable<T2>::value>
3519template <
class T1,
class T2>
3522 && is_trivially_default_constructible<T2>::value>
3530template <
class T1,
class T2>
3533 && IsBitwiseCopyable<T2>::value>
3536template <
class T1,
class T2>
3543template <
class T1,
class T2>
3546 && bslmf::IsBitwiseMoveable<T2>::value>
3549template <
class T1,
class T2>
3552 && bslmf::IsBitwiseEqualityComparable<T2>::value
3553 && sizeof(T1) + sizeof(T2) ==
3554 sizeof(bsl::pair<T1, T2>)>
3561template <
class T1,
class T2>
3564 || UsesBslmaAllocator<T2>::value>
3571#if defined(BSLSTL_PAIR_DO_NOT_SFINAE_TEST_IS_SWAPPABLE)
3572# undef BSLSTL_PAIR_DO_NOT_SFINAE_TEST_IS_SWAPPABLE
Definition bslstl_pair.h:1280
pair(BloombergLP::bslmf::MovableRef< pair< PARAM_1, PARAM_2 > > other, typename bsl::enable_if< bsl::is_convertible< PARAM_1, T1 >::value &&bsl::is_convertible< PARAM_2, T2 >::value, SfinaeEnable >::type=SfinaeEnable())
Definition bslstl_pair.h:1566
pair(const PARAM_1 &a, PARAM_2 &b, BloombergLP::bslma::Allocator *basicAllocator)
Definition bslstl_pair.h:2910
pair(BloombergLP::bslmf::MovableRef< std::pair< PARAM_1, PARAM_2 > > other, BloombergLP::bslma::Allocator *basicAllocator)
Definition bslstl_pair.h:3123
pair(typename bsl::add_lvalue_reference< const T1 >::type a, typename bsl::add_lvalue_reference< const T2 >::type b, BloombergLP::bslma::Allocator *basicAllocator)
Definition bslstl_pair.h:2855
pair(const PARAM_1 &a, const PARAM_2 &b, BloombergLP::bslma::Allocator *basicAllocator)
Definition bslstl_pair.h:2888
T1 first_type
Definition bslstl_pair.h:1303
pair(const std::pair< PARAM_1, PARAM_2 > &other)
Definition bslstl_pair.h:3045
pair(BloombergLP::bslma::Allocator *basicAllocator)
Definition bslstl_pair.h:2837
BSLS_KEYWORD_CONSTEXPR pair(const BloombergLP::bslma::ManagedPtr_PairProxy< PARAM_1, PARAM_2 > &rhs)
Definition bslstl_pair.h:3140
pair & operator=(const pair< PARAM_1, PARAM_2 > &rhs)
pair(const pair &)=default
pair(BloombergLP::bslmf::MovableRef< pair< PARAM_1, PARAM_2 > > other, BloombergLP::bslma::Allocator *basicAllocator)
Definition bslstl_pair.h:3109
pair(PARAM_1 &a, const PARAM_2 &b, BloombergLP::bslma::Allocator *basicAllocator)
Definition bslstl_pair.h:2899
pair(const PARAM_1 &a, PARAM_2 &b, typename bsl::enable_if< bsl::is_convertible< PARAM_1, T1 >::value &&bsl::is_convertible< PARAM_2, T2 >::value &&!(bsl::is_pointer< typename bsl::remove_reference< PARAM_2 >::type >::value &&bsl::is_convertible< PARAM_2, BloombergLP::bslma::Allocator * >::value), SfinaeEnable >::type=SfinaeEnable())
Definition bslstl_pair.h:1463
~pair()=default
destructors.
BSLS_KEYWORD_CONSTEXPR_CPP14 pair & operator=(const std::pair< PARAM_1, PARAM_2 > &rhs)
pair & operator=(const pair &rhs)=default
BSLS_KEYWORD_CONSTEXPR pair(typename bsl::add_lvalue_reference< const T1 >::type a, typename bsl::add_lvalue_reference< const T2 >::type b)
Definition bslstl_pair.h:2846
pair(const pair< PARAM_1, PARAM_2 > &other, BloombergLP::bslma::Allocator *basicAllocator)
Definition bslstl_pair.h:3055
pair(const pair< PARAM_1, PARAM_2 > &other)
Definition bslstl_pair.h:3036
pair(const std::pair< PARAM_1, PARAM_2 > &other, BloombergLP::bslma::Allocator *basicAllocator)
Definition bslstl_pair.h:3065
pair(BloombergLP::bslmf::MovableRef< pair > original, BloombergLP::bslma::Allocator *basicAllocator)
Definition bslstl_pair.h:3002
T2 second_type
Definition bslstl_pair.h:1304
pair(const pair &original, BloombergLP::bslma::Allocator *basicAllocator)
Definition bslstl_pair.h:2971
pair(BloombergLP::bslmf::MovableRef< std::pair< PARAM_1, PARAM_2 > > other, typename bsl::enable_if< bsl::is_convertible< PARAM_1, T1 >::value &&bsl::is_convertible< PARAM_2, T2 >::value, SfinaeEnable >::type=SfinaeEnable())
Definition bslstl_pair.h:1580
pair(PARAM_1 &a, PARAM_2 &b, BloombergLP::bslma::Allocator *basicAllocator)
Definition bslstl_pair.h:2921
pair(const PARAM_1 &a, const PARAM_2 &b, typename bsl::enable_if< bsl::is_convertible< PARAM_1, T1 >::value &&bsl::is_convertible< PARAM_2, T2 >::value &&!(bsl::is_pointer< typename bsl::remove_reference< PARAM_2 >::type >::value &&bsl::is_convertible< PARAM_2, BloombergLP::bslma::Allocator * >::value), SfinaeEnable >::type=SfinaeEnable())
Definition bslstl_pair.h:1417
pair()
Definition bslstl_pair.h:2828
pair & operator=(BloombergLP::bslmf::MovableRef< pair< PARAM_1, PARAM_2 > > rhs)
pair(PARAM_1 &a, PARAM_2 &b, typename bsl::enable_if< bsl::is_convertible< PARAM_1, T1 >::value &&bsl::is_convertible< PARAM_2, T2 >::value &&!(bsl::is_pointer< typename bsl::remove_reference< PARAM_2 >::type >::value &&bsl::is_convertible< PARAM_2, BloombergLP::bslma::Allocator * >::value), SfinaeEnable >::type=SfinaeEnable())
Definition bslstl_pair.h:1486
pair(PARAM_1 &a, const PARAM_2 &b, typename bsl::enable_if< bsl::is_convertible< PARAM_1, T1 >::value &&bsl::is_convertible< PARAM_2, T2 >::value &&!(bsl::is_pointer< typename bsl::remove_reference< PARAM_2 >::type >::value &&bsl::is_convertible< PARAM_2, BloombergLP::bslma::Allocator * >::value), SfinaeEnable >::type=SfinaeEnable())
Definition bslstl_pair.h:1440
#define BSLS_IDENT(str)
BSLS_IDENT() - insert string into .comment binary segment (if supported)
Definition bsls_ident.h:238
#define BSLS_KEYWORD_CONSTEXPR_CPP14
Definition bsls_keyword.h:631
#define BSLS_KEYWORD_CONSTEXPR
Definition bsls_keyword.h:624
#define BSLS_KEYWORD_NOEXCEPT
Definition bsls_keyword.h:674
#define BSLS_KEYWORD_NOEXCEPT_SPECIFICATION(...)
Definition bsls_keyword.h:676
void swap(OptionValue &a, OptionValue &b)
Definition bdlat_valuetypefunctions.h:939
void hashAppend(HASH_ALGORITHM &hashAlgorithm, const array< TYPE, SIZE > &input)
Pass the specified input to the specified hashAlgorithm
Definition bslstl_array.h:959
BSLS_KEYWORD_CONSTEXPR_CPP14 TYPE & get(array< TYPE, SIZE > &a) BSLS_KEYWORD_NOEXCEPT
ALLOCATOR const STRING_VIEW_LIKE_TYPE & rhs
Definition bslstl_string.h:3918
bsl::integral_constant< int, 0 > Pair_BslmaIdiomNone
Definition bslstl_pair.h:450
bsl::integral_constant< int, 2 > Pair_BslmaIdiomAllocatorArgT
Definition bslstl_pair.h:459
ALLOCATOR & lhs
Definition bslstl_string.h:3917
bsl::integral_constant< int, 1 > Pair_BslmaIdiomAtEnd
Definition bslstl_pair.h:454
Definition baljsn_encoder_testtypes.h:76
Definition bdlbb_blob.h:579
Definition bslstl_algorithm.h:84
Definition bdldfp_decimal.h:5549
Definition bslstl_pair.h:479
TYPE & first
Definition bslstl_pair.h:767
Definition bslstl_pair.h:579
Pair_First & operator=(Pair_First &&)=default
Pair_First(const PARAM &value)
Definition bslstl_pair.h:2235
Pair_First(const Pair_First &)=default
Pair_First(PARAM &value)
Definition bslstl_pair.h:2243
Pair_First(const PARAM &value, BloombergLP::bslma::Allocator *basicAllocator, Pair_BslmaIdiomAllocatorArgT)
Definition bslstl_pair.h:2323
Pair_First(PARAM &value, BloombergLP::bslma::Allocator *basicAllocator, Pair_BslmaIdiomAllocatorArgT)
Definition bslstl_pair.h:2333
Pair_First(BloombergLP::bslma::Allocator *basicAllocator, Pair_BslmaIdiomAllocatorArgT)
Definition bslstl_pair.h:2208
Pair_First(PARAM &value, BloombergLP::bslma::Allocator *basicAllocator, Pair_BslmaIdiomAtEnd)
Definition bslstl_pair.h:2313
Pair_First(PARAM &value, BloombergLP::bslma::Allocator *basicAllocator, Pair_BslmaIdiomNone)
Definition bslstl_pair.h:2293
Pair_First(Pair_First &&)=default
BSLS_KEYWORD_CONSTEXPR Pair_First(typename bsl::add_lvalue_reference< const TYPE >::type value)
Definition bslstl_pair.h:2217
Pair_First(const PARAM &value, BloombergLP::bslma::Allocator *basicAllocator, Pair_BslmaIdiomNone)
Definition bslstl_pair.h:2283
Pair_First(BloombergLP::bslma::Allocator *basicAllocator, Pair_BslmaIdiomAtEnd)
Definition bslstl_pair.h:2200
Pair_First & operator=(const Pair_First &)=default
Pair_First(const PARAM &value, BloombergLP::bslma::Allocator *basicAllocator, Pair_BslmaIdiomAtEnd)
Definition bslstl_pair.h:2303
TYPE first
Definition bslstl_pair.h:587
Pair_First()
Value-initialize the 'first' member of a 'pair'.
Definition bslstl_pair.h:2184
Pair_First(BloombergLP::bslma::Allocator *basicAllocator, Pair_BslmaIdiomNone)
Definition bslstl_pair.h:2192
Definition bslstl_pair.h:504
TYPE & second
Definition bslstl_pair.h:1114
Definition bslstl_pair.h:925
Pair_Second(PARAM &value, BloombergLP::bslma::Allocator *basicAllocator, Pair_BslmaIdiomAllocatorArgT)
Definition bslstl_pair.h:2656
Pair_Second(BloombergLP::bslma::Allocator *basicAllocator, Pair_BslmaIdiomAtEnd)
Definition bslstl_pair.h:2524
Pair_Second(const PARAM &value)
Definition bslstl_pair.h:2559
Pair_Second(const PARAM &value, BloombergLP::bslma::Allocator *basicAllocator, Pair_BslmaIdiomAllocatorArgT)
Definition bslstl_pair.h:2646
Pair_Second(const PARAM &value, BloombergLP::bslma::Allocator *basicAllocator, Pair_BslmaIdiomAtEnd)
Definition bslstl_pair.h:2626
Pair_Second()
Value-initialize the 'second' member of a 'pair'.
Definition bslstl_pair.h:2508
Pair_Second(PARAM &value, BloombergLP::bslma::Allocator *basicAllocator, Pair_BslmaIdiomAtEnd)
Definition bslstl_pair.h:2636
Pair_Second(Pair_Second &&)=default
TYPE second
Definition bslstl_pair.h:933
Pair_Second(PARAM &value, BloombergLP::bslma::Allocator *basicAllocator, Pair_BslmaIdiomNone)
Definition bslstl_pair.h:2616
Pair_Second(BloombergLP::bslma::Allocator *basicAllocator, Pair_BslmaIdiomAllocatorArgT)
Definition bslstl_pair.h:2532
Pair_Second(PARAM &value)
Definition bslstl_pair.h:2566
Pair_Second & operator=(const Pair_Second &)=default
Pair_Second(const PARAM &value, BloombergLP::bslma::Allocator *basicAllocator, Pair_BslmaIdiomNone)
Definition bslstl_pair.h:2606
Pair_Second(const Pair_Second &)=default
Pair_Second(BloombergLP::bslma::Allocator *basicAllocator, Pair_BslmaIdiomNone)
Definition bslstl_pair.h:2516
Pair_Second & operator=(Pair_Second &&)=default
BSLS_KEYWORD_CONSTEXPR Pair_Second(typename bsl::add_lvalue_reference< const TYPE >::type value)
Definition bslstl_pair.h:2541
t_TYPE & type
This typedef defines the return type of this meta function.
Definition bslmf_addlvaluereference.h:131
Definition bslmf_allocatorargt.h:433
Definition bslmf_conditional.h:123
Definition bslmf_enableif.h:530
Definition bslmf_integralconstant.h:261
Definition bslmf_isconvertible.h:875
Definition bslmf_ispointer.h:138
Definition bslmf_issame.h:146
Definition bslmf_istriviallycopyable.h:324
Definition bslmf_istriviallydefaultconstructible.h:296
t_TYPE type
This typedef is an alias to the (template parameter) t_TYPE.
Definition bslmf_removereference.h:156
Definition bslma_usesbslmaallocator.h:344
Definition bslmf_isbitwisecopyable.h:298
Definition bslmf_isbitwiseequalitycomparable.h:500
Definition bslmf_isbitwisemoveable.h:718
Definition bslmf_ispair.h:88