205 :
private __pair_base<_T1, _T2>
207 typedef _T1 first_type;
217#if __cplusplus >= 201103L
218 template <
typename _U1 = _T1,
220 typename enable_if<__and_<
223 ::value,
bool>::type =
true>
228#if __cplusplus >= 201103L
229 template <
typename _U1 = _T1,
231 typename enable_if<__and_<
237 ::value,
bool>::type =
false>
238 explicit constexpr pair()
243#if __cplusplus < 201103L
244 pair(
const _T1& __a,
const _T2& __b)
250 template<
typename _U1 = _T1,
typename _U2=_T2,
typename
251 enable_if<_PCCP::template
256 constexpr pair(
const _T1& __a,
const _T2& __b)
259 template<
typename _U1 = _T1,
typename _U2=_T2,
typename
260 enable_if<_PCCP::template
265 explicit constexpr pair(
const _T1& __a,
const _T2& __b)
270#if __cplusplus < 201103L
271 template<
typename _U1,
typename _U2>
272 pair(
const pair<_U1, _U2>& __p)
276 template <
typename _U1,
typename _U2>
278 || !is_same<_T2, _U2>::value,
281 template<
typename _U1,
typename _U2,
typename
290 template<
typename _U1,
typename _U2,
typename
293 && !_PCCFP<_U1, _U2>::template
299 constexpr pair(
const pair&) =
default;
303 template<
typename _U1,
typename
304 enable_if<_PCCP::template
305 _MoveCopyPair<true, _U1, _T2>(),
307 constexpr pair(_U1&& __x,
const _T2& __y)
310 template<
typename _U1,
typename
311 enable_if<_PCCP::template
312 _MoveCopyPair<false, _U1, _T2>(),
314 explicit constexpr pair(_U1&& __x,
const _T2& __y)
317 template<
typename _U2,
typename
318 enable_if<_PCCP::template
319 _CopyMovePair<true, _T1, _U2>(),
321 constexpr pair(
const _T1& __x, _U2&& __y)
324 template<
typename _U2,
typename
325 enable_if<_PCCP::template
326 _CopyMovePair<false, _T1, _U2>(),
328 explicit pair(
const _T1& __x, _U2&& __y)
331 template<
typename _U1,
typename _U2,
typename
332 enable_if<_PCCP::template
333 _MoveConstructiblePair<_U1, _U2>()
335 _ImplicitlyMoveConvertiblePair<_U1, _U2>(),
337 constexpr pair(_U1&& __x, _U2&& __y)
340 template<
typename _U1,
typename _U2,
typename
341 enable_if<_PCCP::template
342 _MoveConstructiblePair<_U1, _U2>()
344 _ImplicitlyMoveConvertiblePair<_U1, _U2>(),
346 explicit constexpr pair(_U1&& __x, _U2&& __y)
350 template<
typename _U1,
typename _U2,
typename
351 enable_if<_PCCFP<_U1, _U2>::template
352 _MoveConstructiblePair<_U1, _U2>()
353 && _PCCFP<_U1, _U2>::template
354 _ImplicitlyMoveConvertiblePair<_U1, _U2>(),
356 constexpr pair(pair<_U1, _U2>&& __p)
360 template<
typename _U1,
typename _U2,
typename
361 enable_if<_PCCFP<_U1, _U2>::template
362 _MoveConstructiblePair<_U1, _U2>()
363 && !_PCCFP<_U1, _U2>::template
364 _ImplicitlyMoveConvertiblePair<_U1, _U2>(),
366 explicit constexpr pair(pair<_U1, _U2>&& __p)
370 template<
typename... _Args1,
typename... _Args2>
371 pair(piecewise_construct_t, tuple<_Args1...>, tuple<_Args2...>);
374 operator=(
typename conditional<
375 __and_<is_copy_assignable<_T1>,
376 is_copy_assignable<_T2>>::value,
377 const pair&,
const __wrap_nonesuch&>::type __p)
385 operator=(
typename conditional<
386 __and_<is_move_assignable<_T1>,
387 is_move_assignable<_T2>>::value,
388 pair&&, __wrap_nonesuch&&>::type __p)
389 noexcept(__and_<is_nothrow_move_assignable<_T1>,
390 is_nothrow_move_assignable<_T2>>::value)
397 template<
typename _U1,
typename _U2>
398 typename enable_if<__and_<is_assignable<_T1&, const _U1&>,
399 is_assignable<_T2&, const _U2&>>::value,
401 operator=(
const pair<_U1, _U2>& __p)
408 template<
typename _U1,
typename _U2>
409 typename enable_if<__and_<is_assignable<_T1&, _U1&&>,
410 is_assignable<_T2&, _U2&&>>::value,
412 operator=(pair<_U1, _U2>&& __p)
421 noexcept(__is_nothrow_swappable<_T1>::value
422 && __is_nothrow_swappable<_T2>::value)
425 swap(
first, __p.first);
430 template<
typename... _Args1, std::size_t... _Indexes1,
431 typename... _Args2, std::size_t... _Indexes2>
432 pair(tuple<_Args1...>&, tuple<_Args2...>&,
433 _Index_tuple<_Indexes1...>, _Index_tuple<_Indexes2...>);