SILENT KILLERPanel

Current Path: > > usr > include > c++ > > 8 > bits


Operation   : Linux premium131.web-hosting.com 4.18.0-553.44.1.lve.el8.x86_64 #1 SMP Thu Mar 13 14:29:12 UTC 2025 x86_64
Software     : Apache
Server IP    : 162.0.232.56 | Your IP: 216.73.216.111
Domains      : 1034 Domain(s)
Permission   : [ 0755 ]

Files and Folders in: //usr/include/c++//8/bits

NameTypeSizeLast ModifiedActions
algorithmfwd.h File 21736 bytes March 31 2025 10:36:16.
alloc_traits.h File 20066 bytes March 31 2025 10:36:16.
allocated_ptr.h File 3293 bytes March 31 2025 10:36:16.
allocator.h File 7569 bytes March 31 2025 10:36:16.
atomic_base.h File 23842 bytes March 31 2025 10:36:16.
atomic_futex.h File 9576 bytes March 31 2025 10:36:16.
atomic_lockfree_defines.h File 2253 bytes March 31 2025 10:36:18.
basic_ios.h File 16074 bytes March 31 2025 10:36:16.
basic_ios.tcc File 6083 bytes March 31 2025 10:36:16.
basic_string.h File 242697 bytes March 31 2025 10:36:16.
basic_string.tcc File 53755 bytes March 31 2025 10:36:16.
boost_concept_check.h File 27161 bytes March 31 2025 10:36:16.
c++0x_warning.h File 1474 bytes March 31 2025 10:36:16.
char_traits.h File 20915 bytes March 31 2025 10:36:16.
codecvt.h File 21289 bytes March 31 2025 10:36:16.
concept_check.h File 3423 bytes March 31 2025 10:36:16.
cpp_type_traits.h File 9789 bytes March 31 2025 10:36:16.
cxxabi_forced.h File 1811 bytes March 31 2025 10:36:18.
cxxabi_init_exception.h File 2220 bytes March 31 2025 10:36:18.
deque.tcc File 34122 bytes March 31 2025 10:36:16.
enable_special_members.h File 12387 bytes March 31 2025 10:36:16.
exception.h File 2280 bytes March 31 2025 10:36:18.
exception_defines.h File 1645 bytes March 31 2025 10:36:18.
exception_ptr.h File 5981 bytes March 31 2025 10:36:18.
forward_list.h File 48919 bytes March 31 2025 10:36:16.
forward_list.tcc File 13169 bytes March 31 2025 10:36:16.
fs_dir.h File 14724 bytes March 31 2025 10:36:16.
fs_fwd.h File 10279 bytes March 31 2025 10:36:16.
fs_ops.h File 9730 bytes March 31 2025 10:36:16.
fs_path.h File 32894 bytes March 31 2025 10:36:16.
fstream.tcc File 32799 bytes March 31 2025 10:36:16.
functexcept.h File 3254 bytes March 31 2025 10:36:16.
functional_hash.h File 8238 bytes March 31 2025 10:36:16.
gslice.h File 5518 bytes March 31 2025 10:36:16.
gslice_array.h File 7769 bytes March 31 2025 10:36:16.
hash_bytes.h File 2146 bytes March 31 2025 10:36:18.
hashtable.h File 73785 bytes March 31 2025 10:36:16.
hashtable_policy.h File 67971 bytes March 31 2025 10:36:16.
indirect_array.h File 7861 bytes March 31 2025 10:36:16.
invoke.h File 3657 bytes March 31 2025 10:36:16.
ios_base.h File 31023 bytes March 31 2025 10:36:16.
istream.tcc File 31093 bytes March 31 2025 10:36:16.
list.tcc File 15976 bytes March 31 2025 10:36:16.
locale_classes.h File 24897 bytes March 31 2025 10:36:16.
locale_classes.tcc File 8375 bytes March 31 2025 10:36:16.
locale_conv.h File 16097 bytes March 31 2025 10:36:16.
locale_facets.h File 92328 bytes March 31 2025 10:36:16.
locale_facets.tcc File 39548 bytes March 31 2025 10:36:16.
locale_facets_nonio.h File 68980 bytes March 31 2025 10:36:16.
locale_facets_nonio.tcc File 45280 bytes March 31 2025 10:36:16.
localefwd.h File 5646 bytes March 31 2025 10:36:16.
mask_array.h File 7595 bytes March 31 2025 10:36:16.
memoryfwd.h File 2453 bytes March 31 2025 10:36:16.
move.h File 6529 bytes March 31 2025 10:36:16.
nested_exception.h File 4802 bytes March 31 2025 10:36:18.
node_handle.h File 8216 bytes March 31 2025 10:36:16.
ostream.tcc File 12315 bytes March 31 2025 10:36:16.
ostream_insert.h File 4002 bytes March 31 2025 10:36:16.
parse_numbers.h File 7944 bytes March 31 2025 10:36:16.
postypes.h File 8208 bytes March 31 2025 10:36:16.
predefined_ops.h File 9083 bytes March 31 2025 10:36:16.
ptr_traits.h File 6626 bytes March 31 2025 10:36:16.
quoted_string.h File 5053 bytes March 31 2025 10:36:16.
random.h File 175250 bytes March 31 2025 10:36:16.
random.tcc File 105590 bytes March 31 2025 10:36:16.
range_access.h File 10030 bytes March 31 2025 10:36:16.
refwrap.h File 11884 bytes March 31 2025 10:36:16.
regex.h File 97402 bytes March 31 2025 10:36:16.
regex.tcc File 16565 bytes March 31 2025 10:36:16.
regex_automaton.h File 10722 bytes March 31 2025 10:36:16.
regex_automaton.tcc File 7838 bytes March 31 2025 10:36:16.
regex_compiler.h File 18050 bytes March 31 2025 10:36:16.
regex_compiler.tcc File 19288 bytes March 31 2025 10:36:16.
regex_constants.h File 14708 bytes March 31 2025 10:36:16.
regex_error.h File 4904 bytes March 31 2025 10:36:16.
regex_executor.h File 7488 bytes March 31 2025 10:36:16.
regex_executor.tcc File 18841 bytes March 31 2025 10:36:16.
regex_scanner.h File 7088 bytes March 31 2025 10:36:16.
regex_scanner.tcc File 15009 bytes March 31 2025 10:36:16.
shared_ptr.h File 23433 bytes March 31 2025 10:36:16.
shared_ptr_atomic.h File 9769 bytes March 31 2025 10:36:16.
shared_ptr_base.h File 54286 bytes March 31 2025 10:36:16.
slice_array.h File 9348 bytes March 31 2025 10:36:16.
specfun.h File 47051 bytes March 31 2025 10:36:16.
sstream.tcc File 10142 bytes March 31 2025 10:36:16.
std_abs.h File 3266 bytes March 31 2025 10:36:16.
std_function.h File 23260 bytes March 31 2025 10:36:16.
std_mutex.h File 9298 bytes March 31 2025 10:36:16.
stl_algo.h File 214294 bytes March 31 2025 10:36:16.
stl_algobase.h File 50494 bytes March 31 2025 10:36:16.
stl_bvector.h File 33728 bytes March 31 2025 10:36:16.
stl_construct.h File 7397 bytes March 31 2025 10:36:16.
stl_deque.h File 78575 bytes March 31 2025 10:36:16.
stl_function.h File 41745 bytes March 31 2025 10:36:16.
stl_heap.h File 20206 bytes March 31 2025 10:36:16.
stl_iterator.h File 42291 bytes March 31 2025 10:36:16.
stl_iterator_base_funcs.h File 8178 bytes March 31 2025 10:36:16.
stl_iterator_base_types.h File 8680 bytes March 31 2025 10:36:16.
stl_list.h File 67558 bytes March 31 2025 10:36:16.
stl_map.h File 52791 bytes March 31 2025 10:36:16.
stl_multimap.h File 41557 bytes March 31 2025 10:36:16.
stl_multiset.h File 35809 bytes March 31 2025 10:36:16.
stl_numeric.h File 13832 bytes March 31 2025 10:36:16.
stl_pair.h File 18642 bytes March 31 2025 10:36:16.
stl_queue.h File 24073 bytes March 31 2025 10:36:16.
stl_raw_storage_iter.h File 3830 bytes March 31 2025 10:36:16.
stl_relops.h File 4594 bytes March 31 2025 10:36:16.
stl_set.h File 36125 bytes March 31 2025 10:36:16.
stl_stack.h File 11938 bytes March 31 2025 10:36:16.
stl_tempbuf.h File 8344 bytes March 31 2025 10:36:16.
stl_tree.h File 74904 bytes March 31 2025 10:36:16.
stl_uninitialized.h File 27709 bytes March 31 2025 10:36:16.
stl_vector.h File 60534 bytes March 31 2025 10:36:16.
stream_iterator.h File 6654 bytes March 31 2025 10:36:16.
streambuf.tcc File 4929 bytes March 31 2025 10:36:16.
streambuf_iterator.h File 13758 bytes March 31 2025 10:36:16.
string_view.tcc File 6698 bytes March 31 2025 10:36:16.
stringfwd.h File 2607 bytes March 31 2025 10:36:16.
uniform_int_dist.h File 10081 bytes March 31 2025 10:36:16.
unique_ptr.h File 25984 bytes March 31 2025 10:36:16.
unordered_map.h File 75341 bytes March 31 2025 10:36:16.
unordered_set.h File 59148 bytes March 31 2025 10:36:16.
uses_allocator.h File 6525 bytes March 31 2025 10:36:16.
valarray_after.h File 22655 bytes March 31 2025 10:36:16.
valarray_array.h File 21807 bytes March 31 2025 10:36:16.
valarray_array.tcc File 7254 bytes March 31 2025 10:36:16.
valarray_before.h File 18513 bytes March 31 2025 10:36:16.
vector.tcc File 29644 bytes March 31 2025 10:36:16.

Reading File: //usr/include/c++//8/bits/stl_pair.h

// Pair implementation -*- C++ -*-

// Copyright (C) 2001-2018 Free Software Foundation, Inc.
//
// This file is part of the GNU ISO C++ Library.  This library is free
// software; you can redistribute it and/or modify it under the
// terms of the GNU General Public License as published by the
// Free Software Foundation; either version 3, or (at your option)
// any later version.

// This library is distributed in the hope that it will be useful,
// but WITHOUT ANY WARRANTY; without even the implied warranty of
// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
// GNU General Public License for more details.

// Under Section 7 of GPL version 3, you are granted additional
// permissions described in the GCC Runtime Library Exception, version
// 3.1, as published by the Free Software Foundation.

// You should have received a copy of the GNU General Public License and
// a copy of the GCC Runtime Library Exception along with this program;
// see the files COPYING3 and COPYING.RUNTIME respectively.  If not, see
// <http://www.gnu.org/licenses/>.

/*
 *
 * Copyright (c) 1994
 * Hewlett-Packard Company
 *
 * Permission to use, copy, modify, distribute and sell this software
 * and its documentation for any purpose is hereby granted without fee,
 * provided that the above copyright notice appear in all copies and
 * that both that copyright notice and this permission notice appear
 * in supporting documentation.  Hewlett-Packard Company makes no
 * representations about the suitability of this software for any
 * purpose.  It is provided "as is" without express or implied warranty.
 *
 *
 * Copyright (c) 1996,1997
 * Silicon Graphics Computer Systems, Inc.
 *
 * Permission to use, copy, modify, distribute and sell this software
 * and its documentation for any purpose is hereby granted without fee,
 * provided that the above copyright notice appear in all copies and
 * that both that copyright notice and this permission notice appear
 * in supporting documentation.  Silicon Graphics makes no
 * representations about the suitability of this software for any
 * purpose.  It is provided "as is" without express or implied warranty.
 */

/** @file bits/stl_pair.h
 *  This is an internal header file, included by other library headers.
 *  Do not attempt to use it directly. @headername{utility}
 */

#ifndef _STL_PAIR_H
#define _STL_PAIR_H 1

#include <bits/move.h> // for std::move / std::forward, and std::swap

#if __cplusplus >= 201103L
#include <type_traits> // for std::__decay_and_strip too
#endif

namespace std _GLIBCXX_VISIBILITY(default)
{
_GLIBCXX_BEGIN_NAMESPACE_VERSION

  /**
   *  @addtogroup utilities
   *  @{
   */

#if __cplusplus >= 201103L
  /// piecewise_construct_t
  struct piecewise_construct_t { explicit piecewise_construct_t() = default; };

  /// piecewise_construct
  _GLIBCXX17_INLINE constexpr piecewise_construct_t piecewise_construct =
    piecewise_construct_t();

  // Forward declarations.
  template<typename...>
    class tuple;

  template<std::size_t...>
    struct _Index_tuple;

  // Concept utility functions, reused in conditionally-explicit
  // constructors.
  // See PR 70437, don't look at is_constructible or
  // is_convertible if the types are the same to
  // avoid querying those properties for incomplete types.
  template <bool, typename _T1, typename _T2>
    struct _PCC
    {
      template <typename _U1, typename _U2>
      static constexpr bool _ConstructiblePair()
      {
	return __and_<is_constructible<_T1, const _U1&>,
		      is_constructible<_T2, const _U2&>>::value;
      }

      template <typename _U1, typename _U2>
      static constexpr bool _ImplicitlyConvertiblePair()
      {
	return __and_<is_convertible<const _U1&, _T1>,
		      is_convertible<const _U2&, _T2>>::value;
      }

      template <typename _U1, typename _U2>
      static constexpr bool _MoveConstructiblePair()
      {
	return __and_<is_constructible<_T1, _U1&&>,
		      is_constructible<_T2, _U2&&>>::value;
      }

      template <typename _U1, typename _U2>
      static constexpr bool _ImplicitlyMoveConvertiblePair()
      {
	return __and_<is_convertible<_U1&&, _T1>,
		      is_convertible<_U2&&, _T2>>::value;
      }

      template <bool __implicit, typename _U1, typename _U2>
      static constexpr bool _CopyMovePair()
      {
	using __do_converts = __and_<is_convertible<const _U1&, _T1>,
				  is_convertible<_U2&&, _T2>>;
	using __converts = typename conditional<__implicit,
				       __do_converts,
				       __not_<__do_converts>>::type;
	return __and_<is_constructible<_T1, const _U1&>,
		      is_constructible<_T2, _U2&&>,
		      __converts
		      >::value;
      }

      template <bool __implicit, typename _U1, typename _U2>
      static constexpr bool _MoveCopyPair()
      {
	using __do_converts = __and_<is_convertible<_U1&&, _T1>,
				  is_convertible<const _U2&, _T2>>;
	using __converts = typename conditional<__implicit,
				       __do_converts,
				       __not_<__do_converts>>::type;
	return __and_<is_constructible<_T1, _U1&&>,
		      is_constructible<_T2, const _U2&&>,
		      __converts
		      >::value;
      }
  };

  template <typename _T1, typename _T2>
    struct _PCC<false, _T1, _T2>
    {
      template <typename _U1, typename _U2>
      static constexpr bool _ConstructiblePair()
      {
	return false;
      }

      template <typename _U1, typename _U2>
      static constexpr bool _ImplicitlyConvertiblePair()
      {
	return false;
      }

      template <typename _U1, typename _U2>
      static constexpr bool _MoveConstructiblePair()
      {
	return false;
      }

      template <typename _U1, typename _U2>
      static constexpr bool _ImplicitlyMoveConvertiblePair()
      {
	return false;
      }
  };

  // PR libstdc++/79141, a utility type for preventing
  // initialization of an argument of a disabled assignment
  // operator from a pair of empty braces.
  struct __nonesuch_no_braces : std::__nonesuch {
    explicit __nonesuch_no_braces(const __nonesuch&) = delete;
  };
#endif // C++11

  template<typename _U1, typename _U2> class __pair_base
  {
#if __cplusplus >= 201103L
    template<typename _T1, typename _T2> friend struct pair;
    __pair_base() = default;
    ~__pair_base() = default;
    __pair_base(const __pair_base&) = default;
    __pair_base& operator=(const __pair_base&) = delete;
#endif // C++11
  };

 /**
   *  @brief Struct holding two objects of arbitrary type.
   *
   *  @tparam _T1  Type of first object.
   *  @tparam _T2  Type of second object.
   */
  template<typename _T1, typename _T2>
    struct pair
    : private __pair_base<_T1, _T2>
    {
      typedef _T1 first_type;    /// @c first_type is the first bound type
      typedef _T2 second_type;   /// @c second_type is the second bound type

      _T1 first;                 /// @c first is a copy of the first object
      _T2 second;                /// @c second is a copy of the second object

      // _GLIBCXX_RESOLVE_LIB_DEFECTS
      // 265.  std::pair::pair() effects overly restrictive
      /** The default constructor creates @c first and @c second using their
       *  respective default constructors.  */
#if __cplusplus >= 201103L
      template <typename _U1 = _T1,
                typename _U2 = _T2,
                typename enable_if<__and_<
                                     __is_implicitly_default_constructible<_U1>,
                                     __is_implicitly_default_constructible<_U2>>
                                   ::value, bool>::type = true>
#endif
      _GLIBCXX_CONSTEXPR pair()
      : first(), second() { }

#if __cplusplus >= 201103L
      template <typename _U1 = _T1,
                typename _U2 = _T2,
                typename enable_if<__and_<
                       is_default_constructible<_U1>,
                       is_default_constructible<_U2>,
                       __not_<
                         __and_<__is_implicitly_default_constructible<_U1>,
                                __is_implicitly_default_constructible<_U2>>>>
                                   ::value, bool>::type = false>
      explicit constexpr pair()
      : first(), second() { }
#endif

      /** Two objects may be passed to a @c pair constructor to be copied.  */
#if __cplusplus < 201103L
      pair(const _T1& __a, const _T2& __b)
      : first(__a), second(__b) { }
#else
      // Shortcut for constraining the templates that don't take pairs.
      using _PCCP = _PCC<true, _T1, _T2>;

      template<typename _U1 = _T1, typename _U2=_T2, typename
	       enable_if<_PCCP::template
			   _ConstructiblePair<_U1, _U2>()
	                 && _PCCP::template
			   _ImplicitlyConvertiblePair<_U1, _U2>(),
                         bool>::type=true>
      constexpr pair(const _T1& __a, const _T2& __b)
      : first(__a), second(__b) { }

       template<typename _U1 = _T1, typename _U2=_T2, typename
		enable_if<_PCCP::template
			    _ConstructiblePair<_U1, _U2>()
	                  && !_PCCP::template
			    _ImplicitlyConvertiblePair<_U1, _U2>(),
                         bool>::type=false>
      explicit constexpr pair(const _T1& __a, const _T2& __b)
      : first(__a), second(__b) { }
#endif

      /** There is also a templated copy ctor for the @c pair class itself.  */
#if __cplusplus < 201103L
      template<typename _U1, typename _U2>
	pair(const pair<_U1, _U2>& __p)
	: first(__p.first), second(__p.second) { }
#else
      // Shortcut for constraining the templates that take pairs.
      template <typename _U1, typename _U2>
        using _PCCFP = _PCC<!is_same<_T1, _U1>::value
			    || !is_same<_T2, _U2>::value,
			    _T1, _T2>;

      template<typename _U1, typename _U2, typename
	       enable_if<_PCCFP<_U1, _U2>::template
			   _ConstructiblePair<_U1, _U2>()
	                 && _PCCFP<_U1, _U2>::template
			   _ImplicitlyConvertiblePair<_U1, _U2>(),
			  bool>::type=true>
        constexpr pair(const pair<_U1, _U2>& __p)
        : first(__p.first), second(__p.second) { }

      template<typename _U1, typename _U2, typename
	       enable_if<_PCCFP<_U1, _U2>::template
			   _ConstructiblePair<_U1, _U2>()
			 && !_PCCFP<_U1, _U2>::template
			   _ImplicitlyConvertiblePair<_U1, _U2>(),
                         bool>::type=false>
	explicit constexpr pair(const pair<_U1, _U2>& __p)
	: first(__p.first), second(__p.second) { }

      constexpr pair(const pair&) = default;
      constexpr pair(pair&&) = default;

      // DR 811.
      template<typename _U1, typename
	       enable_if<_PCCP::template
			   _MoveCopyPair<true, _U1, _T2>(),
                         bool>::type=true>
       constexpr pair(_U1&& __x, const _T2& __y)
       : first(std::forward<_U1>(__x)), second(__y) { }

      template<typename _U1, typename
	       enable_if<_PCCP::template
			   _MoveCopyPair<false, _U1, _T2>(),
                         bool>::type=false>
       explicit constexpr pair(_U1&& __x, const _T2& __y)
       : first(std::forward<_U1>(__x)), second(__y) { }

      template<typename _U2, typename
	       enable_if<_PCCP::template
			   _CopyMovePair<true, _T1, _U2>(),
                         bool>::type=true>
       constexpr pair(const _T1& __x, _U2&& __y)
       : first(__x), second(std::forward<_U2>(__y)) { }

      template<typename _U2, typename
	       enable_if<_PCCP::template
			   _CopyMovePair<false, _T1, _U2>(),
                         bool>::type=false>
       explicit pair(const _T1& __x, _U2&& __y)
       : first(__x), second(std::forward<_U2>(__y)) { }

      template<typename _U1, typename _U2, typename
	       enable_if<_PCCP::template
			   _MoveConstructiblePair<_U1, _U2>()
			  && _PCCP::template
			   _ImplicitlyMoveConvertiblePair<_U1, _U2>(),
                         bool>::type=true>
	constexpr pair(_U1&& __x, _U2&& __y)
	: first(std::forward<_U1>(__x)), second(std::forward<_U2>(__y)) { }

      template<typename _U1, typename _U2, typename
	       enable_if<_PCCP::template
			   _MoveConstructiblePair<_U1, _U2>()
			  && !_PCCP::template
			   _ImplicitlyMoveConvertiblePair<_U1, _U2>(),
                         bool>::type=false>
	explicit constexpr pair(_U1&& __x, _U2&& __y)
	: first(std::forward<_U1>(__x)), second(std::forward<_U2>(__y)) { }


      template<typename _U1, typename _U2, typename
	       enable_if<_PCCFP<_U1, _U2>::template
			   _MoveConstructiblePair<_U1, _U2>()
			  && _PCCFP<_U1, _U2>::template
			   _ImplicitlyMoveConvertiblePair<_U1, _U2>(),
                         bool>::type=true>
	constexpr pair(pair<_U1, _U2>&& __p)
	: first(std::forward<_U1>(__p.first)),
	  second(std::forward<_U2>(__p.second)) { }

      template<typename _U1, typename _U2, typename
	       enable_if<_PCCFP<_U1, _U2>::template
			   _MoveConstructiblePair<_U1, _U2>()
			  && !_PCCFP<_U1, _U2>::template
			   _ImplicitlyMoveConvertiblePair<_U1, _U2>(),
                         bool>::type=false>
	explicit constexpr pair(pair<_U1, _U2>&& __p)
	: first(std::forward<_U1>(__p.first)),
	  second(std::forward<_U2>(__p.second)) { }

      template<typename... _Args1, typename... _Args2>
        pair(piecewise_construct_t, tuple<_Args1...>, tuple<_Args2...>);

      pair&
      operator=(typename conditional<
		__and_<is_copy_assignable<_T1>,
		       is_copy_assignable<_T2>>::value,
		const pair&, const __nonesuch_no_braces&>::type __p)
      {
	first = __p.first;
	second = __p.second;
	return *this;
      }

      pair&
      operator=(typename conditional<
		__and_<is_move_assignable<_T1>,
		       is_move_assignable<_T2>>::value,
		pair&&, __nonesuch_no_braces&&>::type __p)
      noexcept(__and_<is_nothrow_move_assignable<_T1>,
		      is_nothrow_move_assignable<_T2>>::value)
      {
	first = std::forward<first_type>(__p.first);
	second = std::forward<second_type>(__p.second);
	return *this;
      }

      template<typename _U1, typename _U2>
      typename enable_if<__and_<is_assignable<_T1&, const _U1&>,
				is_assignable<_T2&, const _U2&>>::value,
			 pair&>::type
	operator=(const pair<_U1, _U2>& __p)
	{
	  first = __p.first;
	  second = __p.second;
	  return *this;
	}

      template<typename _U1, typename _U2>
      typename enable_if<__and_<is_assignable<_T1&, _U1&&>,
				is_assignable<_T2&, _U2&&>>::value,
			 pair&>::type
	operator=(pair<_U1, _U2>&& __p)
	{
	  first = std::forward<_U1>(__p.first);
	  second = std::forward<_U2>(__p.second);
	  return *this;
	}

      void
      swap(pair& __p)
      noexcept(__and_<__is_nothrow_swappable<_T1>,
                      __is_nothrow_swappable<_T2>>::value)
      {
	using std::swap;
	swap(first, __p.first);
	swap(second, __p.second);
      }

    private:
      template<typename... _Args1, std::size_t... _Indexes1,
               typename... _Args2, std::size_t... _Indexes2>
        pair(tuple<_Args1...>&, tuple<_Args2...>&,
             _Index_tuple<_Indexes1...>, _Index_tuple<_Indexes2...>);
#endif
    };

#if __cpp_deduction_guides >= 201606
  template<typename _T1, typename _T2> pair(_T1, _T2) -> pair<_T1, _T2>;
#endif

  /// Two pairs of the same type are equal iff their members are equal.
  template<typename _T1, typename _T2>
    inline _GLIBCXX_CONSTEXPR bool
    operator==(const pair<_T1, _T2>& __x, const pair<_T1, _T2>& __y)
    { return __x.first == __y.first && __x.second == __y.second; }

  /// <http://gcc.gnu.org/onlinedocs/libstdc++/manual/utilities.html>
  template<typename _T1, typename _T2>
    inline _GLIBCXX_CONSTEXPR bool
    operator<(const pair<_T1, _T2>& __x, const pair<_T1, _T2>& __y)
    { return __x.first < __y.first
	     || (!(__y.first < __x.first) && __x.second < __y.second); }

  /// Uses @c operator== to find the result.
  template<typename _T1, typename _T2>
    inline _GLIBCXX_CONSTEXPR bool
    operator!=(const pair<_T1, _T2>& __x, const pair<_T1, _T2>& __y)
    { return !(__x == __y); }

  /// Uses @c operator< to find the result.
  template<typename _T1, typename _T2>
    inline _GLIBCXX_CONSTEXPR bool
    operator>(const pair<_T1, _T2>& __x, const pair<_T1, _T2>& __y)
    { return __y < __x; }

  /// Uses @c operator< to find the result.
  template<typename _T1, typename _T2>
    inline _GLIBCXX_CONSTEXPR bool
    operator<=(const pair<_T1, _T2>& __x, const pair<_T1, _T2>& __y)
    { return !(__y < __x); }

  /// Uses @c operator< to find the result.
  template<typename _T1, typename _T2>
    inline _GLIBCXX_CONSTEXPR bool
    operator>=(const pair<_T1, _T2>& __x, const pair<_T1, _T2>& __y)
    { return !(__x < __y); }

#if __cplusplus >= 201103L
  /// See std::pair::swap().
  // Note:  no std::swap overloads in C++03 mode, this has performance
  //        implications, see, eg, libstdc++/38466.
  template<typename _T1, typename _T2>
    inline
#if __cplusplus > 201402L || !defined(__STRICT_ANSI__) // c++1z or gnu++11
    // Constrained free swap overload, see p0185r1
    typename enable_if<__and_<__is_swappable<_T1>,
                              __is_swappable<_T2>>::value>::type
#else
    void
#endif
    swap(pair<_T1, _T2>& __x, pair<_T1, _T2>& __y)
    noexcept(noexcept(__x.swap(__y)))
    { __x.swap(__y); }

#if __cplusplus > 201402L || !defined(__STRICT_ANSI__) // c++1z or gnu++11
  template<typename _T1, typename _T2>
    typename enable_if<!__and_<__is_swappable<_T1>,
			       __is_swappable<_T2>>::value>::type
    swap(pair<_T1, _T2>&, pair<_T1, _T2>&) = delete;
#endif
#endif // __cplusplus >= 201103L

  /**
   *  @brief A convenience wrapper for creating a pair from two objects.
   *  @param  __x  The first object.
   *  @param  __y  The second object.
   *  @return   A newly-constructed pair<> object of the appropriate type.
   *
   *  The standard requires that the objects be passed by reference-to-const,
   *  but LWG issue #181 says they should be passed by const value.  We follow
   *  the LWG by default.
   */
  // _GLIBCXX_RESOLVE_LIB_DEFECTS
  // 181.  make_pair() unintended behavior
#if __cplusplus >= 201103L
  // NB: DR 706.
  template<typename _T1, typename _T2>
    constexpr pair<typename __decay_and_strip<_T1>::__type,
                   typename __decay_and_strip<_T2>::__type>
    make_pair(_T1&& __x, _T2&& __y)
    {
      typedef typename __decay_and_strip<_T1>::__type __ds_type1;
      typedef typename __decay_and_strip<_T2>::__type __ds_type2;
      typedef pair<__ds_type1, __ds_type2> 	      __pair_type;
      return __pair_type(std::forward<_T1>(__x), std::forward<_T2>(__y));
    }
#else
  template<typename _T1, typename _T2>
    inline pair<_T1, _T2>
    make_pair(_T1 __x, _T2 __y)
    { return pair<_T1, _T2>(__x, __y); }
#endif

  /// @}

_GLIBCXX_END_NAMESPACE_VERSION
} // namespace std

#endif /* _STL_PAIR_H */

SILENT KILLER Tool