209 :
private __pair_base<_T1, _T2>
211 typedef _T1 first_type;
221#if __cplusplus >= 201103L
222 template <
typename _U1 = _T1,
227 ::value,
bool>::type =
true>
232#if __cplusplus >= 201103L
233 template <
typename _U1 = _T1,
241 ::value,
bool>::type =
false>
242 explicit constexpr pair()
247#if __cplusplus < 201103L
248 pair(
const _T1& __a,
const _T2& __b)
254 template<
typename _U1 = _T1,
typename _U2=_T2,
typename
260 constexpr pair(
const _T1& __a,
const _T2& __b)
263 template<
typename _U1 = _T1,
typename _U2=_T2,
typename
269 explicit constexpr pair(
const _T1& __a,
const _T2& __b)
274#if __cplusplus < 201103L
275 template<
typename _U1,
typename _U2>
276 pair(
const pair<_U1, _U2>& __p)
280 template <
typename _U1,
typename _U2>
285 template<
typename _U1,
typename _U2,
typename
294 template<
typename _U1,
typename _U2,
typename
297 && !_PCCFP<_U1, _U2>::template
303 constexpr pair(
const pair&) =
default;
307 template<
typename _U1,
typename
308 enable_if<_PCCP::template
309 _MoveCopyPair<true, _U1, _T2>(),
311 constexpr pair(_U1&& __x,
const _T2& __y)
314 template<
typename _U1,
typename
315 enable_if<_PCCP::template
316 _MoveCopyPair<false, _U1, _T2>(),
318 explicit constexpr pair(_U1&& __x,
const _T2& __y)
321 template<
typename _U2,
typename
322 enable_if<_PCCP::template
323 _CopyMovePair<true, _T1, _U2>(),
325 constexpr pair(
const _T1& __x, _U2&& __y)
328 template<
typename _U2,
typename
329 enable_if<_PCCP::template
330 _CopyMovePair<false, _T1, _U2>(),
332 explicit pair(
const _T1& __x, _U2&& __y)
335 template<
typename _U1,
typename _U2,
typename
336 enable_if<_PCCP::template
337 _MoveConstructiblePair<_U1, _U2>()
339 _ImplicitlyMoveConvertiblePair<_U1, _U2>(),
341 constexpr pair(_U1&& __x, _U2&& __y)
344 template<
typename _U1,
typename _U2,
typename
345 enable_if<_PCCP::template
346 _MoveConstructiblePair<_U1, _U2>()
348 _ImplicitlyMoveConvertiblePair<_U1, _U2>(),
350 explicit constexpr pair(_U1&& __x, _U2&& __y)
354 template<
typename _U1,
typename _U2,
typename
355 enable_if<_PCCFP<_U1, _U2>::template
356 _MoveConstructiblePair<_U1, _U2>()
357 && _PCCFP<_U1, _U2>::template
358 _ImplicitlyMoveConvertiblePair<_U1, _U2>(),
360 constexpr pair(pair<_U1, _U2>&& __p)
364 template<
typename _U1,
typename _U2,
typename
365 enable_if<_PCCFP<_U1, _U2>::template
366 _MoveConstructiblePair<_U1, _U2>()
367 && !_PCCFP<_U1, _U2>::template
368 _ImplicitlyMoveConvertiblePair<_U1, _U2>(),
370 explicit constexpr pair(pair<_U1, _U2>&& __p)
374 template<
typename... _Args1,
typename... _Args2>
375 pair(piecewise_construct_t, tuple<_Args1...>, tuple<_Args2...>);
378 operator=(
typename conditional<
379 __and_<is_copy_assignable<_T1>,
380 is_copy_assignable<_T2>>::value,
381 const pair&,
const __nonesuch_no_braces&>::type __p)
389 operator=(
typename conditional<
390 __and_<is_move_assignable<_T1>,
391 is_move_assignable<_T2>>::value,
392 pair&&, __nonesuch_no_braces&&>::type __p)
393 noexcept(__and_<is_nothrow_move_assignable<_T1>,
394 is_nothrow_move_assignable<_T2>>::value)
401 template<
typename _U1,
typename _U2>
402 typename enable_if<__and_<is_assignable<_T1&, const _U1&>,
403 is_assignable<_T2&, const _U2&>>::value,
405 operator=(
const pair<_U1, _U2>& __p)
412 template<
typename _U1,
typename _U2>
413 typename enable_if<__and_<is_assignable<_T1&, _U1&&>,
414 is_assignable<_T2&, _U2&&>>::value,
416 operator=(pair<_U1, _U2>&& __p)
425 noexcept(__and_<__is_nothrow_swappable<_T1>,
426 __is_nothrow_swappable<_T2>>::value)
429 swap(
first, __p.first);
434 template<
typename... _Args1, std::size_t... _Indexes1,
435 typename... _Args2, std::size_t... _Indexes2>
436 pair(tuple<_Args1...>&, tuple<_Args2...>&,
437 _Index_tuple<_Indexes1...>, _Index_tuple<_Indexes2...>);