xref: /aosp_15_r20/external/libcxx/include/utility (revision 58b9f456b02922dfdb1fad8a988d5fd8765ecb80)
1*58b9f456SAndroid Build Coastguard Worker// -*- C++ -*-
2*58b9f456SAndroid Build Coastguard Worker//===-------------------------- utility -----------------------------------===//
3*58b9f456SAndroid Build Coastguard Worker//
4*58b9f456SAndroid Build Coastguard Worker//                     The LLVM Compiler Infrastructure
5*58b9f456SAndroid Build Coastguard Worker//
6*58b9f456SAndroid Build Coastguard Worker// This file is dual licensed under the MIT and the University of Illinois Open
7*58b9f456SAndroid Build Coastguard Worker// Source Licenses. See LICENSE.TXT for details.
8*58b9f456SAndroid Build Coastguard Worker//
9*58b9f456SAndroid Build Coastguard Worker//===----------------------------------------------------------------------===//
10*58b9f456SAndroid Build Coastguard Worker
11*58b9f456SAndroid Build Coastguard Worker#ifndef _LIBCPP_UTILITY
12*58b9f456SAndroid Build Coastguard Worker#define _LIBCPP_UTILITY
13*58b9f456SAndroid Build Coastguard Worker
14*58b9f456SAndroid Build Coastguard Worker/*
15*58b9f456SAndroid Build Coastguard Worker    utility synopsis
16*58b9f456SAndroid Build Coastguard Worker
17*58b9f456SAndroid Build Coastguard Worker#include <initializer_list>
18*58b9f456SAndroid Build Coastguard Worker
19*58b9f456SAndroid Build Coastguard Workernamespace std
20*58b9f456SAndroid Build Coastguard Worker{
21*58b9f456SAndroid Build Coastguard Worker
22*58b9f456SAndroid Build Coastguard Workertemplate <class T>
23*58b9f456SAndroid Build Coastguard Worker    void
24*58b9f456SAndroid Build Coastguard Worker    swap(T& a, T& b);
25*58b9f456SAndroid Build Coastguard Worker
26*58b9f456SAndroid Build Coastguard Workernamespace rel_ops
27*58b9f456SAndroid Build Coastguard Worker{
28*58b9f456SAndroid Build Coastguard Worker    template<class T> bool operator!=(const T&, const T&);
29*58b9f456SAndroid Build Coastguard Worker    template<class T> bool operator> (const T&, const T&);
30*58b9f456SAndroid Build Coastguard Worker    template<class T> bool operator<=(const T&, const T&);
31*58b9f456SAndroid Build Coastguard Worker    template<class T> bool operator>=(const T&, const T&);
32*58b9f456SAndroid Build Coastguard Worker}
33*58b9f456SAndroid Build Coastguard Worker
34*58b9f456SAndroid Build Coastguard Workertemplate<class T>
35*58b9f456SAndroid Build Coastguard Workervoid
36*58b9f456SAndroid Build Coastguard Workerswap(T& a, T& b) noexcept(is_nothrow_move_constructible<T>::value &&
37*58b9f456SAndroid Build Coastguard Worker                          is_nothrow_move_assignable<T>::value);
38*58b9f456SAndroid Build Coastguard Worker
39*58b9f456SAndroid Build Coastguard Workertemplate <class T, size_t N>
40*58b9f456SAndroid Build Coastguard Workervoid
41*58b9f456SAndroid Build Coastguard Workerswap(T (&a)[N], T (&b)[N]) noexcept(noexcept(swap(*a, *b)));
42*58b9f456SAndroid Build Coastguard Worker
43*58b9f456SAndroid Build Coastguard Workertemplate <class T> T&& forward(typename remove_reference<T>::type& t) noexcept;  // constexpr in C++14
44*58b9f456SAndroid Build Coastguard Workertemplate <class T> T&& forward(typename remove_reference<T>::type&& t) noexcept; // constexpr in C++14
45*58b9f456SAndroid Build Coastguard Worker
46*58b9f456SAndroid Build Coastguard Workertemplate <class T> typename remove_reference<T>::type&& move(T&&) noexcept;      // constexpr in C++14
47*58b9f456SAndroid Build Coastguard Worker
48*58b9f456SAndroid Build Coastguard Workertemplate <class T>
49*58b9f456SAndroid Build Coastguard Worker    typename conditional
50*58b9f456SAndroid Build Coastguard Worker    <
51*58b9f456SAndroid Build Coastguard Worker        !is_nothrow_move_constructible<T>::value && is_copy_constructible<T>::value,
52*58b9f456SAndroid Build Coastguard Worker        const T&,
53*58b9f456SAndroid Build Coastguard Worker        T&&
54*58b9f456SAndroid Build Coastguard Worker    >::type
55*58b9f456SAndroid Build Coastguard Worker    move_if_noexcept(T& x) noexcept; // constexpr in C++14
56*58b9f456SAndroid Build Coastguard Worker
57*58b9f456SAndroid Build Coastguard Workertemplate <class T> constexpr add_const_t<T>& as_const(T& t) noexcept;      // C++17
58*58b9f456SAndroid Build Coastguard Workertemplate <class T>                      void as_const(const T&&) = delete; // C++17
59*58b9f456SAndroid Build Coastguard Worker
60*58b9f456SAndroid Build Coastguard Workertemplate <class T> typename add_rvalue_reference<T>::type declval() noexcept;
61*58b9f456SAndroid Build Coastguard Worker
62*58b9f456SAndroid Build Coastguard Workertemplate <class T1, class T2>
63*58b9f456SAndroid Build Coastguard Workerstruct pair
64*58b9f456SAndroid Build Coastguard Worker{
65*58b9f456SAndroid Build Coastguard Worker    typedef T1 first_type;
66*58b9f456SAndroid Build Coastguard Worker    typedef T2 second_type;
67*58b9f456SAndroid Build Coastguard Worker
68*58b9f456SAndroid Build Coastguard Worker    T1 first;
69*58b9f456SAndroid Build Coastguard Worker    T2 second;
70*58b9f456SAndroid Build Coastguard Worker
71*58b9f456SAndroid Build Coastguard Worker    pair(const pair&) = default;
72*58b9f456SAndroid Build Coastguard Worker    pair(pair&&) = default;
73*58b9f456SAndroid Build Coastguard Worker    constexpr pair();
74*58b9f456SAndroid Build Coastguard Worker    pair(const T1& x, const T2& y);                          // constexpr in C++14
75*58b9f456SAndroid Build Coastguard Worker    template <class U, class V> pair(U&& x, V&& y);          // constexpr in C++14
76*58b9f456SAndroid Build Coastguard Worker    template <class U, class V> pair(const pair<U, V>& p);   // constexpr in C++14
77*58b9f456SAndroid Build Coastguard Worker    template <class U, class V> pair(pair<U, V>&& p);        // constexpr in C++14
78*58b9f456SAndroid Build Coastguard Worker    template <class... Args1, class... Args2>
79*58b9f456SAndroid Build Coastguard Worker        pair(piecewise_construct_t, tuple<Args1...> first_args,
80*58b9f456SAndroid Build Coastguard Worker             tuple<Args2...> second_args);
81*58b9f456SAndroid Build Coastguard Worker
82*58b9f456SAndroid Build Coastguard Worker    template <class U, class V> pair& operator=(const pair<U, V>& p);
83*58b9f456SAndroid Build Coastguard Worker    pair& operator=(pair&& p) noexcept(is_nothrow_move_assignable<T1>::value &&
84*58b9f456SAndroid Build Coastguard Worker                                       is_nothrow_move_assignable<T2>::value);
85*58b9f456SAndroid Build Coastguard Worker    template <class U, class V> pair& operator=(pair<U, V>&& p);
86*58b9f456SAndroid Build Coastguard Worker
87*58b9f456SAndroid Build Coastguard Worker    void swap(pair& p) noexcept(is_nothrow_swappable_v<T1> &&
88*58b9f456SAndroid Build Coastguard Worker                                is_nothrow_swappable_v<T2>);
89*58b9f456SAndroid Build Coastguard Worker};
90*58b9f456SAndroid Build Coastguard Worker
91*58b9f456SAndroid Build Coastguard Workertemplate <class T1, class T2> bool operator==(const pair<T1,T2>&, const pair<T1,T2>&); // constexpr in C++14
92*58b9f456SAndroid Build Coastguard Workertemplate <class T1, class T2> bool operator!=(const pair<T1,T2>&, const pair<T1,T2>&); // constexpr in C++14
93*58b9f456SAndroid Build Coastguard Workertemplate <class T1, class T2> bool operator< (const pair<T1,T2>&, const pair<T1,T2>&); // constexpr in C++14
94*58b9f456SAndroid Build Coastguard Workertemplate <class T1, class T2> bool operator> (const pair<T1,T2>&, const pair<T1,T2>&); // constexpr in C++14
95*58b9f456SAndroid Build Coastguard Workertemplate <class T1, class T2> bool operator>=(const pair<T1,T2>&, const pair<T1,T2>&); // constexpr in C++14
96*58b9f456SAndroid Build Coastguard Workertemplate <class T1, class T2> bool operator<=(const pair<T1,T2>&, const pair<T1,T2>&); // constexpr in C++14
97*58b9f456SAndroid Build Coastguard Worker
98*58b9f456SAndroid Build Coastguard Workertemplate <class T1, class T2> pair<V1, V2> make_pair(T1&&, T2&&);   // constexpr in C++14
99*58b9f456SAndroid Build Coastguard Workertemplate <class T1, class T2>
100*58b9f456SAndroid Build Coastguard Workervoid
101*58b9f456SAndroid Build Coastguard Workerswap(pair<T1, T2>& x, pair<T1, T2>& y) noexcept(noexcept(x.swap(y)));
102*58b9f456SAndroid Build Coastguard Worker
103*58b9f456SAndroid Build Coastguard Workerstruct piecewise_construct_t { };
104*58b9f456SAndroid Build Coastguard Workerinline constexpr piecewise_construct_t piecewise_construct = piecewise_construct_t();
105*58b9f456SAndroid Build Coastguard Worker
106*58b9f456SAndroid Build Coastguard Workertemplate <class T> struct tuple_size;
107*58b9f456SAndroid Build Coastguard Workertemplate <size_t I, class T> class tuple_element;
108*58b9f456SAndroid Build Coastguard Worker
109*58b9f456SAndroid Build Coastguard Workertemplate <class T1, class T2> struct tuple_size<pair<T1, T2> >;
110*58b9f456SAndroid Build Coastguard Workertemplate <class T1, class T2> struct tuple_element<0, pair<T1, T2> >;
111*58b9f456SAndroid Build Coastguard Workertemplate <class T1, class T2> struct tuple_element<1, pair<T1, T2> >;
112*58b9f456SAndroid Build Coastguard Worker
113*58b9f456SAndroid Build Coastguard Workertemplate<size_t I, class T1, class T2>
114*58b9f456SAndroid Build Coastguard Worker    typename tuple_element<I, pair<T1, T2> >::type&
115*58b9f456SAndroid Build Coastguard Worker    get(pair<T1, T2>&) noexcept; // constexpr in C++14
116*58b9f456SAndroid Build Coastguard Worker
117*58b9f456SAndroid Build Coastguard Workertemplate<size_t I, class T1, class T2>
118*58b9f456SAndroid Build Coastguard Worker    const typename tuple_element<I, pair<T1, T2> >::type&
119*58b9f456SAndroid Build Coastguard Worker    get(const pair<T1, T2>&) noexcept; // constexpr in C++14
120*58b9f456SAndroid Build Coastguard Worker
121*58b9f456SAndroid Build Coastguard Workertemplate<size_t I, class T1, class T2>
122*58b9f456SAndroid Build Coastguard Worker    typename tuple_element<I, pair<T1, T2> >::type&&
123*58b9f456SAndroid Build Coastguard Worker    get(pair<T1, T2>&&) noexcept; // constexpr in C++14
124*58b9f456SAndroid Build Coastguard Worker
125*58b9f456SAndroid Build Coastguard Workertemplate<size_t I, class T1, class T2>
126*58b9f456SAndroid Build Coastguard Worker    const typename tuple_element<I, pair<T1, T2> >::type&&
127*58b9f456SAndroid Build Coastguard Worker    get(const pair<T1, T2>&&) noexcept; // constexpr in C++14
128*58b9f456SAndroid Build Coastguard Worker
129*58b9f456SAndroid Build Coastguard Workertemplate<class T1, class T2>
130*58b9f456SAndroid Build Coastguard Worker    constexpr T1& get(pair<T1, T2>&) noexcept; // C++14
131*58b9f456SAndroid Build Coastguard Worker
132*58b9f456SAndroid Build Coastguard Workertemplate<class T1, class T2>
133*58b9f456SAndroid Build Coastguard Worker    constexpr const T1& get(const pair<T1, T2>&) noexcept; // C++14
134*58b9f456SAndroid Build Coastguard Worker
135*58b9f456SAndroid Build Coastguard Workertemplate<class T1, class T2>
136*58b9f456SAndroid Build Coastguard Worker    constexpr T1&& get(pair<T1, T2>&&) noexcept; // C++14
137*58b9f456SAndroid Build Coastguard Worker
138*58b9f456SAndroid Build Coastguard Workertemplate<class T1, class T2>
139*58b9f456SAndroid Build Coastguard Worker    constexpr const T1&& get(const pair<T1, T2>&&) noexcept; // C++14
140*58b9f456SAndroid Build Coastguard Worker
141*58b9f456SAndroid Build Coastguard Workertemplate<class T1, class T2>
142*58b9f456SAndroid Build Coastguard Worker    constexpr T1& get(pair<T2, T1>&) noexcept; // C++14
143*58b9f456SAndroid Build Coastguard Worker
144*58b9f456SAndroid Build Coastguard Workertemplate<class T1, class T2>
145*58b9f456SAndroid Build Coastguard Worker    constexpr const T1& get(const pair<T2, T1>&) noexcept; // C++14
146*58b9f456SAndroid Build Coastguard Worker
147*58b9f456SAndroid Build Coastguard Workertemplate<class T1, class T2>
148*58b9f456SAndroid Build Coastguard Worker    constexpr T1&& get(pair<T2, T1>&&) noexcept; // C++14
149*58b9f456SAndroid Build Coastguard Worker
150*58b9f456SAndroid Build Coastguard Workertemplate<class T1, class T2>
151*58b9f456SAndroid Build Coastguard Worker    constexpr const T1&& get(const pair<T2, T1>&&) noexcept; // C++14
152*58b9f456SAndroid Build Coastguard Worker
153*58b9f456SAndroid Build Coastguard Worker// C++14
154*58b9f456SAndroid Build Coastguard Worker
155*58b9f456SAndroid Build Coastguard Workertemplate<class T, T... I>
156*58b9f456SAndroid Build Coastguard Workerstruct integer_sequence
157*58b9f456SAndroid Build Coastguard Worker{
158*58b9f456SAndroid Build Coastguard Worker    typedef T value_type;
159*58b9f456SAndroid Build Coastguard Worker
160*58b9f456SAndroid Build Coastguard Worker    static constexpr size_t size() noexcept;
161*58b9f456SAndroid Build Coastguard Worker};
162*58b9f456SAndroid Build Coastguard Worker
163*58b9f456SAndroid Build Coastguard Workertemplate<size_t... I>
164*58b9f456SAndroid Build Coastguard Worker  using index_sequence = integer_sequence<size_t, I...>;
165*58b9f456SAndroid Build Coastguard Worker
166*58b9f456SAndroid Build Coastguard Workertemplate<class T, T N>
167*58b9f456SAndroid Build Coastguard Worker  using make_integer_sequence = integer_sequence<T, 0, 1, ..., N-1>;
168*58b9f456SAndroid Build Coastguard Workertemplate<size_t N>
169*58b9f456SAndroid Build Coastguard Worker  using make_index_sequence = make_integer_sequence<size_t, N>;
170*58b9f456SAndroid Build Coastguard Worker
171*58b9f456SAndroid Build Coastguard Workertemplate<class... T>
172*58b9f456SAndroid Build Coastguard Worker  using index_sequence_for = make_index_sequence<sizeof...(T)>;
173*58b9f456SAndroid Build Coastguard Worker
174*58b9f456SAndroid Build Coastguard Workertemplate<class T, class U=T>
175*58b9f456SAndroid Build Coastguard Worker    T exchange(T& obj, U&& new_value);
176*58b9f456SAndroid Build Coastguard Worker
177*58b9f456SAndroid Build Coastguard Worker// 20.2.7, in-place construction // C++17
178*58b9f456SAndroid Build Coastguard Workerstruct in_place_t {
179*58b9f456SAndroid Build Coastguard Worker  explicit in_place_t() = default;
180*58b9f456SAndroid Build Coastguard Worker};
181*58b9f456SAndroid Build Coastguard Workerinline constexpr in_place_t in_place{};
182*58b9f456SAndroid Build Coastguard Workertemplate <class T>
183*58b9f456SAndroid Build Coastguard Worker  struct in_place_type_t {
184*58b9f456SAndroid Build Coastguard Worker    explicit in_place_type_t() = default;
185*58b9f456SAndroid Build Coastguard Worker  };
186*58b9f456SAndroid Build Coastguard Workertemplate <class T>
187*58b9f456SAndroid Build Coastguard Worker  inline constexpr in_place_type_t<T> in_place_type{};
188*58b9f456SAndroid Build Coastguard Workertemplate <size_t I>
189*58b9f456SAndroid Build Coastguard Worker  struct in_place_index_t {
190*58b9f456SAndroid Build Coastguard Worker    explicit in_place_index_t() = default;
191*58b9f456SAndroid Build Coastguard Worker  };
192*58b9f456SAndroid Build Coastguard Workertemplate <size_t I>
193*58b9f456SAndroid Build Coastguard Worker  inline constexpr in_place_index_t<I> in_place_index{};
194*58b9f456SAndroid Build Coastguard Worker
195*58b9f456SAndroid Build Coastguard Worker}  // std
196*58b9f456SAndroid Build Coastguard Worker
197*58b9f456SAndroid Build Coastguard Worker*/
198*58b9f456SAndroid Build Coastguard Worker
199*58b9f456SAndroid Build Coastguard Worker#include <__config>
200*58b9f456SAndroid Build Coastguard Worker#include <__tuple>
201*58b9f456SAndroid Build Coastguard Worker#include <type_traits>
202*58b9f456SAndroid Build Coastguard Worker#include <initializer_list>
203*58b9f456SAndroid Build Coastguard Worker#include <cstddef>
204*58b9f456SAndroid Build Coastguard Worker#include <cstring>
205*58b9f456SAndroid Build Coastguard Worker#include <cstdint>
206*58b9f456SAndroid Build Coastguard Worker#include <version>
207*58b9f456SAndroid Build Coastguard Worker#include <__debug>
208*58b9f456SAndroid Build Coastguard Worker
209*58b9f456SAndroid Build Coastguard Worker#if !defined(_LIBCPP_HAS_NO_PRAGMA_SYSTEM_HEADER)
210*58b9f456SAndroid Build Coastguard Worker#pragma GCC system_header
211*58b9f456SAndroid Build Coastguard Worker#endif
212*58b9f456SAndroid Build Coastguard Worker
213*58b9f456SAndroid Build Coastguard Worker_LIBCPP_BEGIN_NAMESPACE_STD
214*58b9f456SAndroid Build Coastguard Worker
215*58b9f456SAndroid Build Coastguard Workernamespace rel_ops
216*58b9f456SAndroid Build Coastguard Worker{
217*58b9f456SAndroid Build Coastguard Worker
218*58b9f456SAndroid Build Coastguard Workertemplate<class _Tp>
219*58b9f456SAndroid Build Coastguard Workerinline _LIBCPP_INLINE_VISIBILITY
220*58b9f456SAndroid Build Coastguard Workerbool
221*58b9f456SAndroid Build Coastguard Workeroperator!=(const _Tp& __x, const _Tp& __y)
222*58b9f456SAndroid Build Coastguard Worker{
223*58b9f456SAndroid Build Coastguard Worker    return !(__x == __y);
224*58b9f456SAndroid Build Coastguard Worker}
225*58b9f456SAndroid Build Coastguard Worker
226*58b9f456SAndroid Build Coastguard Workertemplate<class _Tp>
227*58b9f456SAndroid Build Coastguard Workerinline _LIBCPP_INLINE_VISIBILITY
228*58b9f456SAndroid Build Coastguard Workerbool
229*58b9f456SAndroid Build Coastguard Workeroperator> (const _Tp& __x, const _Tp& __y)
230*58b9f456SAndroid Build Coastguard Worker{
231*58b9f456SAndroid Build Coastguard Worker    return __y < __x;
232*58b9f456SAndroid Build Coastguard Worker}
233*58b9f456SAndroid Build Coastguard Worker
234*58b9f456SAndroid Build Coastguard Workertemplate<class _Tp>
235*58b9f456SAndroid Build Coastguard Workerinline _LIBCPP_INLINE_VISIBILITY
236*58b9f456SAndroid Build Coastguard Workerbool
237*58b9f456SAndroid Build Coastguard Workeroperator<=(const _Tp& __x, const _Tp& __y)
238*58b9f456SAndroid Build Coastguard Worker{
239*58b9f456SAndroid Build Coastguard Worker    return !(__y < __x);
240*58b9f456SAndroid Build Coastguard Worker}
241*58b9f456SAndroid Build Coastguard Worker
242*58b9f456SAndroid Build Coastguard Workertemplate<class _Tp>
243*58b9f456SAndroid Build Coastguard Workerinline _LIBCPP_INLINE_VISIBILITY
244*58b9f456SAndroid Build Coastguard Workerbool
245*58b9f456SAndroid Build Coastguard Workeroperator>=(const _Tp& __x, const _Tp& __y)
246*58b9f456SAndroid Build Coastguard Worker{
247*58b9f456SAndroid Build Coastguard Worker    return !(__x < __y);
248*58b9f456SAndroid Build Coastguard Worker}
249*58b9f456SAndroid Build Coastguard Worker
250*58b9f456SAndroid Build Coastguard Worker}  // rel_ops
251*58b9f456SAndroid Build Coastguard Worker
252*58b9f456SAndroid Build Coastguard Worker// swap_ranges
253*58b9f456SAndroid Build Coastguard Worker
254*58b9f456SAndroid Build Coastguard Worker
255*58b9f456SAndroid Build Coastguard Workertemplate <class _ForwardIterator1, class _ForwardIterator2>
256*58b9f456SAndroid Build Coastguard Workerinline _LIBCPP_INLINE_VISIBILITY
257*58b9f456SAndroid Build Coastguard Worker_ForwardIterator2
258*58b9f456SAndroid Build Coastguard Workerswap_ranges(_ForwardIterator1 __first1, _ForwardIterator1 __last1, _ForwardIterator2 __first2)
259*58b9f456SAndroid Build Coastguard Worker{
260*58b9f456SAndroid Build Coastguard Worker    for(; __first1 != __last1; ++__first1, (void) ++__first2)
261*58b9f456SAndroid Build Coastguard Worker        swap(*__first1, *__first2);
262*58b9f456SAndroid Build Coastguard Worker    return __first2;
263*58b9f456SAndroid Build Coastguard Worker}
264*58b9f456SAndroid Build Coastguard Worker
265*58b9f456SAndroid Build Coastguard Worker// forward declared in <type_traits>
266*58b9f456SAndroid Build Coastguard Workertemplate<class _Tp, size_t _Np>
267*58b9f456SAndroid Build Coastguard Workerinline _LIBCPP_INLINE_VISIBILITY
268*58b9f456SAndroid Build Coastguard Workertypename enable_if<
269*58b9f456SAndroid Build Coastguard Worker    __is_swappable<_Tp>::value
270*58b9f456SAndroid Build Coastguard Worker>::type
271*58b9f456SAndroid Build Coastguard Workerswap(_Tp (&__a)[_Np], _Tp (&__b)[_Np]) _NOEXCEPT_(__is_nothrow_swappable<_Tp>::value)
272*58b9f456SAndroid Build Coastguard Worker{
273*58b9f456SAndroid Build Coastguard Worker    _VSTD::swap_ranges(__a, __a + _Np, __b);
274*58b9f456SAndroid Build Coastguard Worker}
275*58b9f456SAndroid Build Coastguard Worker
276*58b9f456SAndroid Build Coastguard Workertemplate <class _Tp>
277*58b9f456SAndroid Build Coastguard Workerinline _LIBCPP_INLINE_VISIBILITY _LIBCPP_CONSTEXPR_AFTER_CXX11
278*58b9f456SAndroid Build Coastguard Worker#ifndef _LIBCPP_CXX03_LANG
279*58b9f456SAndroid Build Coastguard Workertypename conditional
280*58b9f456SAndroid Build Coastguard Worker<
281*58b9f456SAndroid Build Coastguard Worker    !is_nothrow_move_constructible<_Tp>::value && is_copy_constructible<_Tp>::value,
282*58b9f456SAndroid Build Coastguard Worker    const _Tp&,
283*58b9f456SAndroid Build Coastguard Worker    _Tp&&
284*58b9f456SAndroid Build Coastguard Worker>::type
285*58b9f456SAndroid Build Coastguard Worker#else  // _LIBCPP_CXX03_LANG
286*58b9f456SAndroid Build Coastguard Workerconst _Tp&
287*58b9f456SAndroid Build Coastguard Worker#endif
288*58b9f456SAndroid Build Coastguard Workermove_if_noexcept(_Tp& __x) _NOEXCEPT
289*58b9f456SAndroid Build Coastguard Worker{
290*58b9f456SAndroid Build Coastguard Worker    return _VSTD::move(__x);
291*58b9f456SAndroid Build Coastguard Worker}
292*58b9f456SAndroid Build Coastguard Worker
293*58b9f456SAndroid Build Coastguard Worker#if _LIBCPP_STD_VER > 14
294*58b9f456SAndroid Build Coastguard Workertemplate <class _Tp> constexpr add_const_t<_Tp>& as_const(_Tp& __t) noexcept { return __t; }
295*58b9f456SAndroid Build Coastguard Workertemplate <class _Tp>                        void as_const(const _Tp&&) = delete;
296*58b9f456SAndroid Build Coastguard Worker#endif
297*58b9f456SAndroid Build Coastguard Worker
298*58b9f456SAndroid Build Coastguard Workerstruct _LIBCPP_TEMPLATE_VIS piecewise_construct_t { };
299*58b9f456SAndroid Build Coastguard Worker#if defined(_LIBCPP_CXX03_LANG) || defined(_LIBCPP_BUILDING_LIBRARY)
300*58b9f456SAndroid Build Coastguard Workerextern _LIBCPP_EXPORTED_FROM_ABI const piecewise_construct_t piecewise_construct;// = piecewise_construct_t();
301*58b9f456SAndroid Build Coastguard Worker#else
302*58b9f456SAndroid Build Coastguard Worker/* _LIBCPP_INLINE_VAR */ constexpr piecewise_construct_t piecewise_construct = piecewise_construct_t();
303*58b9f456SAndroid Build Coastguard Worker#endif
304*58b9f456SAndroid Build Coastguard Worker
305*58b9f456SAndroid Build Coastguard Worker#if defined(_LIBCPP_DEPRECATED_ABI_DISABLE_PAIR_TRIVIAL_COPY_CTOR)
306*58b9f456SAndroid Build Coastguard Workerstruct __non_trivially_copyable_base {
307*58b9f456SAndroid Build Coastguard Worker  _LIBCPP_CONSTEXPR _LIBCPP_INLINE_VISIBILITY
308*58b9f456SAndroid Build Coastguard Worker  __non_trivially_copyable_base() _NOEXCEPT {}
309*58b9f456SAndroid Build Coastguard Worker  _LIBCPP_CONSTEXPR_AFTER_CXX11 _LIBCPP_INLINE_VISIBILITY
310*58b9f456SAndroid Build Coastguard Worker  __non_trivially_copyable_base(__non_trivially_copyable_base const&) _NOEXCEPT {}
311*58b9f456SAndroid Build Coastguard Worker};
312*58b9f456SAndroid Build Coastguard Worker#endif
313*58b9f456SAndroid Build Coastguard Worker
314*58b9f456SAndroid Build Coastguard Workertemplate <class _T1, class _T2>
315*58b9f456SAndroid Build Coastguard Workerstruct _LIBCPP_TEMPLATE_VIS pair
316*58b9f456SAndroid Build Coastguard Worker#if defined(_LIBCPP_DEPRECATED_ABI_DISABLE_PAIR_TRIVIAL_COPY_CTOR)
317*58b9f456SAndroid Build Coastguard Worker: private __non_trivially_copyable_base
318*58b9f456SAndroid Build Coastguard Worker#endif
319*58b9f456SAndroid Build Coastguard Worker{
320*58b9f456SAndroid Build Coastguard Worker    typedef _T1 first_type;
321*58b9f456SAndroid Build Coastguard Worker    typedef _T2 second_type;
322*58b9f456SAndroid Build Coastguard Worker
323*58b9f456SAndroid Build Coastguard Worker    _T1 first;
324*58b9f456SAndroid Build Coastguard Worker    _T2 second;
325*58b9f456SAndroid Build Coastguard Worker
326*58b9f456SAndroid Build Coastguard Worker#if !defined(_LIBCPP_CXX03_LANG)
327*58b9f456SAndroid Build Coastguard Worker    pair(pair const&) = default;
328*58b9f456SAndroid Build Coastguard Worker    pair(pair&&) = default;
329*58b9f456SAndroid Build Coastguard Worker#else
330*58b9f456SAndroid Build Coastguard Worker  // Use the implicitly declared copy constructor in C++03
331*58b9f456SAndroid Build Coastguard Worker#endif
332*58b9f456SAndroid Build Coastguard Worker
333*58b9f456SAndroid Build Coastguard Worker#ifdef _LIBCPP_CXX03_LANG
334*58b9f456SAndroid Build Coastguard Worker    _LIBCPP_INLINE_VISIBILITY
335*58b9f456SAndroid Build Coastguard Worker    pair() : first(), second() {}
336*58b9f456SAndroid Build Coastguard Worker
337*58b9f456SAndroid Build Coastguard Worker    _LIBCPP_INLINE_VISIBILITY
338*58b9f456SAndroid Build Coastguard Worker    pair(_T1 const& __t1, _T2 const& __t2) : first(__t1), second(__t2) {}
339*58b9f456SAndroid Build Coastguard Worker
340*58b9f456SAndroid Build Coastguard Worker    template <class _U1, class _U2>
341*58b9f456SAndroid Build Coastguard Worker    _LIBCPP_INLINE_VISIBILITY
342*58b9f456SAndroid Build Coastguard Worker    pair(const pair<_U1, _U2>& __p) : first(__p.first), second(__p.second) {}
343*58b9f456SAndroid Build Coastguard Worker
344*58b9f456SAndroid Build Coastguard Worker    _LIBCPP_INLINE_VISIBILITY
345*58b9f456SAndroid Build Coastguard Worker    pair& operator=(pair const& __p) {
346*58b9f456SAndroid Build Coastguard Worker        first = __p.first;
347*58b9f456SAndroid Build Coastguard Worker        second = __p.second;
348*58b9f456SAndroid Build Coastguard Worker        return *this;
349*58b9f456SAndroid Build Coastguard Worker    }
350*58b9f456SAndroid Build Coastguard Worker#else
351*58b9f456SAndroid Build Coastguard Worker    template <bool _Val>
352*58b9f456SAndroid Build Coastguard Worker    using _EnableB = typename enable_if<_Val, bool>::type;
353*58b9f456SAndroid Build Coastguard Worker
354*58b9f456SAndroid Build Coastguard Worker    struct _CheckArgs {
355*58b9f456SAndroid Build Coastguard Worker      template <class _U1, class _U2>
356*58b9f456SAndroid Build Coastguard Worker      static constexpr bool __enable_default() {
357*58b9f456SAndroid Build Coastguard Worker          return is_default_constructible<_U1>::value
358*58b9f456SAndroid Build Coastguard Worker              && is_default_constructible<_U2>::value;
359*58b9f456SAndroid Build Coastguard Worker      }
360*58b9f456SAndroid Build Coastguard Worker
361*58b9f456SAndroid Build Coastguard Worker      template <class _U1, class _U2>
362*58b9f456SAndroid Build Coastguard Worker      static constexpr bool __enable_explicit() {
363*58b9f456SAndroid Build Coastguard Worker          return is_constructible<first_type, _U1>::value
364*58b9f456SAndroid Build Coastguard Worker              && is_constructible<second_type, _U2>::value
365*58b9f456SAndroid Build Coastguard Worker              && (!is_convertible<_U1, first_type>::value
366*58b9f456SAndroid Build Coastguard Worker                  || !is_convertible<_U2, second_type>::value);
367*58b9f456SAndroid Build Coastguard Worker      }
368*58b9f456SAndroid Build Coastguard Worker
369*58b9f456SAndroid Build Coastguard Worker      template <class _U1, class _U2>
370*58b9f456SAndroid Build Coastguard Worker      static constexpr bool __enable_implicit() {
371*58b9f456SAndroid Build Coastguard Worker          return is_constructible<first_type, _U1>::value
372*58b9f456SAndroid Build Coastguard Worker              && is_constructible<second_type, _U2>::value
373*58b9f456SAndroid Build Coastguard Worker              && is_convertible<_U1, first_type>::value
374*58b9f456SAndroid Build Coastguard Worker              && is_convertible<_U2, second_type>::value;
375*58b9f456SAndroid Build Coastguard Worker      }
376*58b9f456SAndroid Build Coastguard Worker    };
377*58b9f456SAndroid Build Coastguard Worker
378*58b9f456SAndroid Build Coastguard Worker    template <bool _MaybeEnable>
379*58b9f456SAndroid Build Coastguard Worker    using _CheckArgsDep = typename conditional<
380*58b9f456SAndroid Build Coastguard Worker      _MaybeEnable, _CheckArgs, __check_tuple_constructor_fail>::type;
381*58b9f456SAndroid Build Coastguard Worker
382*58b9f456SAndroid Build Coastguard Worker    struct _CheckTupleLikeConstructor {
383*58b9f456SAndroid Build Coastguard Worker        template <class _Tuple>
384*58b9f456SAndroid Build Coastguard Worker        static constexpr bool __enable_implicit() {
385*58b9f456SAndroid Build Coastguard Worker            return __tuple_convertible<_Tuple, pair>::value;
386*58b9f456SAndroid Build Coastguard Worker        }
387*58b9f456SAndroid Build Coastguard Worker
388*58b9f456SAndroid Build Coastguard Worker        template <class _Tuple>
389*58b9f456SAndroid Build Coastguard Worker        static constexpr bool __enable_explicit() {
390*58b9f456SAndroid Build Coastguard Worker            return __tuple_constructible<_Tuple, pair>::value
391*58b9f456SAndroid Build Coastguard Worker               && !__tuple_convertible<_Tuple, pair>::value;
392*58b9f456SAndroid Build Coastguard Worker        }
393*58b9f456SAndroid Build Coastguard Worker
394*58b9f456SAndroid Build Coastguard Worker        template <class _Tuple>
395*58b9f456SAndroid Build Coastguard Worker        static constexpr bool __enable_assign() {
396*58b9f456SAndroid Build Coastguard Worker            return __tuple_assignable<_Tuple, pair>::value;
397*58b9f456SAndroid Build Coastguard Worker        }
398*58b9f456SAndroid Build Coastguard Worker    };
399*58b9f456SAndroid Build Coastguard Worker
400*58b9f456SAndroid Build Coastguard Worker    template <class _Tuple>
401*58b9f456SAndroid Build Coastguard Worker    using _CheckTLC = typename conditional<
402*58b9f456SAndroid Build Coastguard Worker        __tuple_like_with_size<_Tuple, 2>::value
403*58b9f456SAndroid Build Coastguard Worker            && !is_same<typename decay<_Tuple>::type, pair>::value,
404*58b9f456SAndroid Build Coastguard Worker        _CheckTupleLikeConstructor,
405*58b9f456SAndroid Build Coastguard Worker        __check_tuple_constructor_fail
406*58b9f456SAndroid Build Coastguard Worker    >::type;
407*58b9f456SAndroid Build Coastguard Worker
408*58b9f456SAndroid Build Coastguard Worker    template<bool _Dummy = true, _EnableB<
409*58b9f456SAndroid Build Coastguard Worker            _CheckArgsDep<_Dummy>::template __enable_default<_T1, _T2>()
410*58b9f456SAndroid Build Coastguard Worker    > = false>
411*58b9f456SAndroid Build Coastguard Worker    _LIBCPP_INLINE_VISIBILITY _LIBCPP_CONSTEXPR
412*58b9f456SAndroid Build Coastguard Worker    pair() _NOEXCEPT_(is_nothrow_default_constructible<first_type>::value &&
413*58b9f456SAndroid Build Coastguard Worker                      is_nothrow_default_constructible<second_type>::value)
414*58b9f456SAndroid Build Coastguard Worker        : first(), second() {}
415*58b9f456SAndroid Build Coastguard Worker
416*58b9f456SAndroid Build Coastguard Worker    template <bool _Dummy = true, _EnableB<
417*58b9f456SAndroid Build Coastguard Worker             _CheckArgsDep<_Dummy>::template __enable_explicit<_T1 const&, _T2 const&>()
418*58b9f456SAndroid Build Coastguard Worker    > = false>
419*58b9f456SAndroid Build Coastguard Worker    _LIBCPP_INLINE_VISIBILITY _LIBCPP_CONSTEXPR_AFTER_CXX11
420*58b9f456SAndroid Build Coastguard Worker    explicit pair(_T1 const& __t1, _T2 const& __t2)
421*58b9f456SAndroid Build Coastguard Worker        _NOEXCEPT_(is_nothrow_copy_constructible<first_type>::value &&
422*58b9f456SAndroid Build Coastguard Worker                   is_nothrow_copy_constructible<second_type>::value)
423*58b9f456SAndroid Build Coastguard Worker        : first(__t1), second(__t2) {}
424*58b9f456SAndroid Build Coastguard Worker
425*58b9f456SAndroid Build Coastguard Worker    template<bool _Dummy = true, _EnableB<
426*58b9f456SAndroid Build Coastguard Worker            _CheckArgsDep<_Dummy>::template __enable_implicit<_T1 const&, _T2 const&>()
427*58b9f456SAndroid Build Coastguard Worker    > = false>
428*58b9f456SAndroid Build Coastguard Worker    _LIBCPP_INLINE_VISIBILITY _LIBCPP_CONSTEXPR_AFTER_CXX11
429*58b9f456SAndroid Build Coastguard Worker    pair(_T1 const& __t1, _T2 const& __t2)
430*58b9f456SAndroid Build Coastguard Worker        _NOEXCEPT_(is_nothrow_copy_constructible<first_type>::value &&
431*58b9f456SAndroid Build Coastguard Worker                   is_nothrow_copy_constructible<second_type>::value)
432*58b9f456SAndroid Build Coastguard Worker        : first(__t1), second(__t2) {}
433*58b9f456SAndroid Build Coastguard Worker
434*58b9f456SAndroid Build Coastguard Worker    template<class _U1, class _U2, _EnableB<
435*58b9f456SAndroid Build Coastguard Worker             _CheckArgs::template __enable_explicit<_U1, _U2>()
436*58b9f456SAndroid Build Coastguard Worker    > = false>
437*58b9f456SAndroid Build Coastguard Worker    _LIBCPP_INLINE_VISIBILITY _LIBCPP_CONSTEXPR_AFTER_CXX11
438*58b9f456SAndroid Build Coastguard Worker    explicit pair(_U1&& __u1, _U2&& __u2)
439*58b9f456SAndroid Build Coastguard Worker        _NOEXCEPT_((is_nothrow_constructible<first_type, _U1>::value &&
440*58b9f456SAndroid Build Coastguard Worker                    is_nothrow_constructible<second_type, _U2>::value))
441*58b9f456SAndroid Build Coastguard Worker        : first(_VSTD::forward<_U1>(__u1)), second(_VSTD::forward<_U2>(__u2)) {}
442*58b9f456SAndroid Build Coastguard Worker
443*58b9f456SAndroid Build Coastguard Worker    template<class _U1, class _U2, _EnableB<
444*58b9f456SAndroid Build Coastguard Worker            _CheckArgs::template __enable_implicit<_U1, _U2>()
445*58b9f456SAndroid Build Coastguard Worker    > = false>
446*58b9f456SAndroid Build Coastguard Worker    _LIBCPP_INLINE_VISIBILITY _LIBCPP_CONSTEXPR_AFTER_CXX11
447*58b9f456SAndroid Build Coastguard Worker    pair(_U1&& __u1, _U2&& __u2)
448*58b9f456SAndroid Build Coastguard Worker        _NOEXCEPT_((is_nothrow_constructible<first_type, _U1>::value &&
449*58b9f456SAndroid Build Coastguard Worker                    is_nothrow_constructible<second_type, _U2>::value))
450*58b9f456SAndroid Build Coastguard Worker        : first(_VSTD::forward<_U1>(__u1)), second(_VSTD::forward<_U2>(__u2)) {}
451*58b9f456SAndroid Build Coastguard Worker
452*58b9f456SAndroid Build Coastguard Worker    template<class _U1, class _U2, _EnableB<
453*58b9f456SAndroid Build Coastguard Worker            _CheckArgs::template __enable_explicit<_U1 const&, _U2 const&>()
454*58b9f456SAndroid Build Coastguard Worker    > = false>
455*58b9f456SAndroid Build Coastguard Worker    _LIBCPP_INLINE_VISIBILITY _LIBCPP_CONSTEXPR_AFTER_CXX11
456*58b9f456SAndroid Build Coastguard Worker    explicit pair(pair<_U1, _U2> const& __p)
457*58b9f456SAndroid Build Coastguard Worker        _NOEXCEPT_((is_nothrow_constructible<first_type, _U1 const&>::value &&
458*58b9f456SAndroid Build Coastguard Worker                    is_nothrow_constructible<second_type, _U2 const&>::value))
459*58b9f456SAndroid Build Coastguard Worker        : first(__p.first), second(__p.second) {}
460*58b9f456SAndroid Build Coastguard Worker
461*58b9f456SAndroid Build Coastguard Worker    template<class _U1, class _U2, _EnableB<
462*58b9f456SAndroid Build Coastguard Worker            _CheckArgs::template __enable_implicit<_U1 const&, _U2 const&>()
463*58b9f456SAndroid Build Coastguard Worker    > = false>
464*58b9f456SAndroid Build Coastguard Worker    _LIBCPP_INLINE_VISIBILITY _LIBCPP_CONSTEXPR_AFTER_CXX11
465*58b9f456SAndroid Build Coastguard Worker    pair(pair<_U1, _U2> const& __p)
466*58b9f456SAndroid Build Coastguard Worker        _NOEXCEPT_((is_nothrow_constructible<first_type, _U1 const&>::value &&
467*58b9f456SAndroid Build Coastguard Worker                    is_nothrow_constructible<second_type, _U2 const&>::value))
468*58b9f456SAndroid Build Coastguard Worker        : first(__p.first), second(__p.second) {}
469*58b9f456SAndroid Build Coastguard Worker
470*58b9f456SAndroid Build Coastguard Worker    template<class _U1, class _U2, _EnableB<
471*58b9f456SAndroid Build Coastguard Worker            _CheckArgs::template __enable_explicit<_U1, _U2>()
472*58b9f456SAndroid Build Coastguard Worker    > = false>
473*58b9f456SAndroid Build Coastguard Worker    _LIBCPP_INLINE_VISIBILITY _LIBCPP_CONSTEXPR_AFTER_CXX11
474*58b9f456SAndroid Build Coastguard Worker    explicit pair(pair<_U1, _U2>&&__p)
475*58b9f456SAndroid Build Coastguard Worker        _NOEXCEPT_((is_nothrow_constructible<first_type, _U1&&>::value &&
476*58b9f456SAndroid Build Coastguard Worker                    is_nothrow_constructible<second_type, _U2&&>::value))
477*58b9f456SAndroid Build Coastguard Worker        : first(_VSTD::forward<_U1>(__p.first)), second(_VSTD::forward<_U2>(__p.second)) {}
478*58b9f456SAndroid Build Coastguard Worker
479*58b9f456SAndroid Build Coastguard Worker    template<class _U1, class _U2, _EnableB<
480*58b9f456SAndroid Build Coastguard Worker            _CheckArgs::template __enable_implicit<_U1, _U2>()
481*58b9f456SAndroid Build Coastguard Worker    > = false>
482*58b9f456SAndroid Build Coastguard Worker    _LIBCPP_INLINE_VISIBILITY _LIBCPP_CONSTEXPR_AFTER_CXX11
483*58b9f456SAndroid Build Coastguard Worker    pair(pair<_U1, _U2>&& __p)
484*58b9f456SAndroid Build Coastguard Worker        _NOEXCEPT_((is_nothrow_constructible<first_type, _U1&&>::value &&
485*58b9f456SAndroid Build Coastguard Worker                    is_nothrow_constructible<second_type, _U2&&>::value))
486*58b9f456SAndroid Build Coastguard Worker        : first(_VSTD::forward<_U1>(__p.first)), second(_VSTD::forward<_U2>(__p.second)) {}
487*58b9f456SAndroid Build Coastguard Worker
488*58b9f456SAndroid Build Coastguard Worker    template<class _Tuple, _EnableB<
489*58b9f456SAndroid Build Coastguard Worker            _CheckTLC<_Tuple>::template __enable_explicit<_Tuple>()
490*58b9f456SAndroid Build Coastguard Worker    > = false>
491*58b9f456SAndroid Build Coastguard Worker    _LIBCPP_INLINE_VISIBILITY _LIBCPP_CONSTEXPR_AFTER_CXX11
492*58b9f456SAndroid Build Coastguard Worker    explicit pair(_Tuple&& __p)
493*58b9f456SAndroid Build Coastguard Worker        : first(_VSTD::get<0>(_VSTD::forward<_Tuple>(__p))),
494*58b9f456SAndroid Build Coastguard Worker          second(_VSTD::get<1>(_VSTD::forward<_Tuple>(__p))) {}
495*58b9f456SAndroid Build Coastguard Worker
496*58b9f456SAndroid Build Coastguard Worker    template<class _Tuple, _EnableB<
497*58b9f456SAndroid Build Coastguard Worker            _CheckTLC<_Tuple>::template __enable_implicit<_Tuple>()
498*58b9f456SAndroid Build Coastguard Worker    > = false>
499*58b9f456SAndroid Build Coastguard Worker    _LIBCPP_INLINE_VISIBILITY _LIBCPP_CONSTEXPR_AFTER_CXX11
500*58b9f456SAndroid Build Coastguard Worker    pair(_Tuple&& __p)
501*58b9f456SAndroid Build Coastguard Worker        : first(_VSTD::get<0>(_VSTD::forward<_Tuple>(__p))),
502*58b9f456SAndroid Build Coastguard Worker          second(_VSTD::get<1>(_VSTD::forward<_Tuple>(__p))) {}
503*58b9f456SAndroid Build Coastguard Worker
504*58b9f456SAndroid Build Coastguard Worker    template <class... _Args1, class... _Args2>
505*58b9f456SAndroid Build Coastguard Worker    _LIBCPP_INLINE_VISIBILITY
506*58b9f456SAndroid Build Coastguard Worker    pair(piecewise_construct_t __pc,
507*58b9f456SAndroid Build Coastguard Worker         tuple<_Args1...> __first_args, tuple<_Args2...> __second_args)
508*58b9f456SAndroid Build Coastguard Worker        _NOEXCEPT_((is_nothrow_constructible<first_type, _Args1...>::value &&
509*58b9f456SAndroid Build Coastguard Worker                    is_nothrow_constructible<second_type, _Args2...>::value))
510*58b9f456SAndroid Build Coastguard Worker        : pair(__pc, __first_args, __second_args,
511*58b9f456SAndroid Build Coastguard Worker                typename __make_tuple_indices<sizeof...(_Args1)>::type(),
512*58b9f456SAndroid Build Coastguard Worker                typename __make_tuple_indices<sizeof...(_Args2) >::type()) {}
513*58b9f456SAndroid Build Coastguard Worker
514*58b9f456SAndroid Build Coastguard Worker    _LIBCPP_INLINE_VISIBILITY
515*58b9f456SAndroid Build Coastguard Worker    pair& operator=(typename conditional<
516*58b9f456SAndroid Build Coastguard Worker                        is_copy_assignable<first_type>::value &&
517*58b9f456SAndroid Build Coastguard Worker                        is_copy_assignable<second_type>::value,
518*58b9f456SAndroid Build Coastguard Worker                    pair, __nat>::type const& __p)
519*58b9f456SAndroid Build Coastguard Worker        _NOEXCEPT_(is_nothrow_copy_assignable<first_type>::value &&
520*58b9f456SAndroid Build Coastguard Worker                   is_nothrow_copy_assignable<second_type>::value)
521*58b9f456SAndroid Build Coastguard Worker    {
522*58b9f456SAndroid Build Coastguard Worker        first = __p.first;
523*58b9f456SAndroid Build Coastguard Worker        second = __p.second;
524*58b9f456SAndroid Build Coastguard Worker        return *this;
525*58b9f456SAndroid Build Coastguard Worker    }
526*58b9f456SAndroid Build Coastguard Worker
527*58b9f456SAndroid Build Coastguard Worker    _LIBCPP_INLINE_VISIBILITY
528*58b9f456SAndroid Build Coastguard Worker    pair& operator=(typename conditional<
529*58b9f456SAndroid Build Coastguard Worker                        is_move_assignable<first_type>::value &&
530*58b9f456SAndroid Build Coastguard Worker                        is_move_assignable<second_type>::value,
531*58b9f456SAndroid Build Coastguard Worker                    pair, __nat>::type&& __p)
532*58b9f456SAndroid Build Coastguard Worker        _NOEXCEPT_(is_nothrow_move_assignable<first_type>::value &&
533*58b9f456SAndroid Build Coastguard Worker                   is_nothrow_move_assignable<second_type>::value)
534*58b9f456SAndroid Build Coastguard Worker    {
535*58b9f456SAndroid Build Coastguard Worker        first = _VSTD::forward<first_type>(__p.first);
536*58b9f456SAndroid Build Coastguard Worker        second = _VSTD::forward<second_type>(__p.second);
537*58b9f456SAndroid Build Coastguard Worker        return *this;
538*58b9f456SAndroid Build Coastguard Worker    }
539*58b9f456SAndroid Build Coastguard Worker
540*58b9f456SAndroid Build Coastguard Worker    template <class _Tuple, _EnableB<
541*58b9f456SAndroid Build Coastguard Worker            _CheckTLC<_Tuple>::template __enable_assign<_Tuple>()
542*58b9f456SAndroid Build Coastguard Worker     > = false>
543*58b9f456SAndroid Build Coastguard Worker    _LIBCPP_INLINE_VISIBILITY
544*58b9f456SAndroid Build Coastguard Worker    pair& operator=(_Tuple&& __p) {
545*58b9f456SAndroid Build Coastguard Worker        first = _VSTD::get<0>(_VSTD::forward<_Tuple>(__p));
546*58b9f456SAndroid Build Coastguard Worker        second = _VSTD::get<1>(_VSTD::forward<_Tuple>(__p));
547*58b9f456SAndroid Build Coastguard Worker        return *this;
548*58b9f456SAndroid Build Coastguard Worker    }
549*58b9f456SAndroid Build Coastguard Worker#endif
550*58b9f456SAndroid Build Coastguard Worker
551*58b9f456SAndroid Build Coastguard Worker    _LIBCPP_INLINE_VISIBILITY
552*58b9f456SAndroid Build Coastguard Worker    void
553*58b9f456SAndroid Build Coastguard Worker    swap(pair& __p) _NOEXCEPT_(__is_nothrow_swappable<first_type>::value &&
554*58b9f456SAndroid Build Coastguard Worker                               __is_nothrow_swappable<second_type>::value)
555*58b9f456SAndroid Build Coastguard Worker    {
556*58b9f456SAndroid Build Coastguard Worker        using _VSTD::swap;
557*58b9f456SAndroid Build Coastguard Worker        swap(first,  __p.first);
558*58b9f456SAndroid Build Coastguard Worker        swap(second, __p.second);
559*58b9f456SAndroid Build Coastguard Worker    }
560*58b9f456SAndroid Build Coastguard Workerprivate:
561*58b9f456SAndroid Build Coastguard Worker
562*58b9f456SAndroid Build Coastguard Worker#ifndef _LIBCPP_CXX03_LANG
563*58b9f456SAndroid Build Coastguard Worker    template <class... _Args1, class... _Args2, size_t... _I1, size_t... _I2>
564*58b9f456SAndroid Build Coastguard Worker        _LIBCPP_INLINE_VISIBILITY
565*58b9f456SAndroid Build Coastguard Worker        pair(piecewise_construct_t,
566*58b9f456SAndroid Build Coastguard Worker             tuple<_Args1...>& __first_args, tuple<_Args2...>& __second_args,
567*58b9f456SAndroid Build Coastguard Worker             __tuple_indices<_I1...>, __tuple_indices<_I2...>);
568*58b9f456SAndroid Build Coastguard Worker#endif
569*58b9f456SAndroid Build Coastguard Worker};
570*58b9f456SAndroid Build Coastguard Worker
571*58b9f456SAndroid Build Coastguard Worker#ifndef _LIBCPP_HAS_NO_DEDUCTION_GUIDES
572*58b9f456SAndroid Build Coastguard Workertemplate<class _T1, class _T2>
573*58b9f456SAndroid Build Coastguard Workerpair(_T1, _T2) -> pair<_T1, _T2>;
574*58b9f456SAndroid Build Coastguard Worker#endif // _LIBCPP_HAS_NO_DEDUCTION_GUIDES
575*58b9f456SAndroid Build Coastguard Worker
576*58b9f456SAndroid Build Coastguard Workertemplate <class _T1, class _T2>
577*58b9f456SAndroid Build Coastguard Workerinline _LIBCPP_INLINE_VISIBILITY _LIBCPP_CONSTEXPR_AFTER_CXX11
578*58b9f456SAndroid Build Coastguard Workerbool
579*58b9f456SAndroid Build Coastguard Workeroperator==(const pair<_T1,_T2>& __x, const pair<_T1,_T2>& __y)
580*58b9f456SAndroid Build Coastguard Worker{
581*58b9f456SAndroid Build Coastguard Worker    return __x.first == __y.first && __x.second == __y.second;
582*58b9f456SAndroid Build Coastguard Worker}
583*58b9f456SAndroid Build Coastguard Worker
584*58b9f456SAndroid Build Coastguard Workertemplate <class _T1, class _T2>
585*58b9f456SAndroid Build Coastguard Workerinline _LIBCPP_INLINE_VISIBILITY _LIBCPP_CONSTEXPR_AFTER_CXX11
586*58b9f456SAndroid Build Coastguard Workerbool
587*58b9f456SAndroid Build Coastguard Workeroperator!=(const pair<_T1,_T2>& __x, const pair<_T1,_T2>& __y)
588*58b9f456SAndroid Build Coastguard Worker{
589*58b9f456SAndroid Build Coastguard Worker    return !(__x == __y);
590*58b9f456SAndroid Build Coastguard Worker}
591*58b9f456SAndroid Build Coastguard Worker
592*58b9f456SAndroid Build Coastguard Workertemplate <class _T1, class _T2>
593*58b9f456SAndroid Build Coastguard Workerinline _LIBCPP_INLINE_VISIBILITY _LIBCPP_CONSTEXPR_AFTER_CXX11
594*58b9f456SAndroid Build Coastguard Workerbool
595*58b9f456SAndroid Build Coastguard Workeroperator< (const pair<_T1,_T2>& __x, const pair<_T1,_T2>& __y)
596*58b9f456SAndroid Build Coastguard Worker{
597*58b9f456SAndroid Build Coastguard Worker    return __x.first < __y.first || (!(__y.first < __x.first) && __x.second < __y.second);
598*58b9f456SAndroid Build Coastguard Worker}
599*58b9f456SAndroid Build Coastguard Worker
600*58b9f456SAndroid Build Coastguard Workertemplate <class _T1, class _T2>
601*58b9f456SAndroid Build Coastguard Workerinline _LIBCPP_INLINE_VISIBILITY _LIBCPP_CONSTEXPR_AFTER_CXX11
602*58b9f456SAndroid Build Coastguard Workerbool
603*58b9f456SAndroid Build Coastguard Workeroperator> (const pair<_T1,_T2>& __x, const pair<_T1,_T2>& __y)
604*58b9f456SAndroid Build Coastguard Worker{
605*58b9f456SAndroid Build Coastguard Worker    return __y < __x;
606*58b9f456SAndroid Build Coastguard Worker}
607*58b9f456SAndroid Build Coastguard Worker
608*58b9f456SAndroid Build Coastguard Workertemplate <class _T1, class _T2>
609*58b9f456SAndroid Build Coastguard Workerinline _LIBCPP_INLINE_VISIBILITY _LIBCPP_CONSTEXPR_AFTER_CXX11
610*58b9f456SAndroid Build Coastguard Workerbool
611*58b9f456SAndroid Build Coastguard Workeroperator>=(const pair<_T1,_T2>& __x, const pair<_T1,_T2>& __y)
612*58b9f456SAndroid Build Coastguard Worker{
613*58b9f456SAndroid Build Coastguard Worker    return !(__x < __y);
614*58b9f456SAndroid Build Coastguard Worker}
615*58b9f456SAndroid Build Coastguard Worker
616*58b9f456SAndroid Build Coastguard Workertemplate <class _T1, class _T2>
617*58b9f456SAndroid Build Coastguard Workerinline _LIBCPP_INLINE_VISIBILITY _LIBCPP_CONSTEXPR_AFTER_CXX11
618*58b9f456SAndroid Build Coastguard Workerbool
619*58b9f456SAndroid Build Coastguard Workeroperator<=(const pair<_T1,_T2>& __x, const pair<_T1,_T2>& __y)
620*58b9f456SAndroid Build Coastguard Worker{
621*58b9f456SAndroid Build Coastguard Worker    return !(__y < __x);
622*58b9f456SAndroid Build Coastguard Worker}
623*58b9f456SAndroid Build Coastguard Worker
624*58b9f456SAndroid Build Coastguard Workertemplate <class _T1, class _T2>
625*58b9f456SAndroid Build Coastguard Workerinline _LIBCPP_INLINE_VISIBILITY
626*58b9f456SAndroid Build Coastguard Workertypename enable_if
627*58b9f456SAndroid Build Coastguard Worker<
628*58b9f456SAndroid Build Coastguard Worker    __is_swappable<_T1>::value &&
629*58b9f456SAndroid Build Coastguard Worker    __is_swappable<_T2>::value,
630*58b9f456SAndroid Build Coastguard Worker    void
631*58b9f456SAndroid Build Coastguard Worker>::type
632*58b9f456SAndroid Build Coastguard Workerswap(pair<_T1, _T2>& __x, pair<_T1, _T2>& __y)
633*58b9f456SAndroid Build Coastguard Worker                     _NOEXCEPT_((__is_nothrow_swappable<_T1>::value &&
634*58b9f456SAndroid Build Coastguard Worker                                 __is_nothrow_swappable<_T2>::value))
635*58b9f456SAndroid Build Coastguard Worker{
636*58b9f456SAndroid Build Coastguard Worker    __x.swap(__y);
637*58b9f456SAndroid Build Coastguard Worker}
638*58b9f456SAndroid Build Coastguard Worker
639*58b9f456SAndroid Build Coastguard Workertemplate <class _Tp>
640*58b9f456SAndroid Build Coastguard Workerstruct __unwrap_reference { typedef _Tp type; };
641*58b9f456SAndroid Build Coastguard Worker
642*58b9f456SAndroid Build Coastguard Workertemplate <class _Tp>
643*58b9f456SAndroid Build Coastguard Workerstruct __unwrap_reference<reference_wrapper<_Tp> > { typedef _Tp& type; };
644*58b9f456SAndroid Build Coastguard Worker
645*58b9f456SAndroid Build Coastguard Worker#if _LIBCPP_STD_VER > 17
646*58b9f456SAndroid Build Coastguard Workertemplate <class _Tp>
647*58b9f456SAndroid Build Coastguard Workerstruct unwrap_reference : __unwrap_reference<_Tp> { };
648*58b9f456SAndroid Build Coastguard Worker
649*58b9f456SAndroid Build Coastguard Workertemplate <class _Tp>
650*58b9f456SAndroid Build Coastguard Workerstruct unwrap_ref_decay : unwrap_reference<typename decay<_Tp>::type> { };
651*58b9f456SAndroid Build Coastguard Worker#endif // > C++17
652*58b9f456SAndroid Build Coastguard Worker
653*58b9f456SAndroid Build Coastguard Workertemplate <class _Tp>
654*58b9f456SAndroid Build Coastguard Workerstruct __unwrap_ref_decay
655*58b9f456SAndroid Build Coastguard Worker#if _LIBCPP_STD_VER > 17
656*58b9f456SAndroid Build Coastguard Worker    : unwrap_ref_decay<_Tp>
657*58b9f456SAndroid Build Coastguard Worker#else
658*58b9f456SAndroid Build Coastguard Worker    : __unwrap_reference<typename decay<_Tp>::type>
659*58b9f456SAndroid Build Coastguard Worker#endif
660*58b9f456SAndroid Build Coastguard Worker{ };
661*58b9f456SAndroid Build Coastguard Worker
662*58b9f456SAndroid Build Coastguard Worker#ifndef _LIBCPP_CXX03_LANG
663*58b9f456SAndroid Build Coastguard Worker
664*58b9f456SAndroid Build Coastguard Workertemplate <class _T1, class _T2>
665*58b9f456SAndroid Build Coastguard Workerinline _LIBCPP_INLINE_VISIBILITY _LIBCPP_CONSTEXPR_AFTER_CXX11
666*58b9f456SAndroid Build Coastguard Workerpair<typename __unwrap_ref_decay<_T1>::type, typename __unwrap_ref_decay<_T2>::type>
667*58b9f456SAndroid Build Coastguard Workermake_pair(_T1&& __t1, _T2&& __t2)
668*58b9f456SAndroid Build Coastguard Worker{
669*58b9f456SAndroid Build Coastguard Worker    return pair<typename __unwrap_ref_decay<_T1>::type, typename __unwrap_ref_decay<_T2>::type>
670*58b9f456SAndroid Build Coastguard Worker               (_VSTD::forward<_T1>(__t1), _VSTD::forward<_T2>(__t2));
671*58b9f456SAndroid Build Coastguard Worker}
672*58b9f456SAndroid Build Coastguard Worker
673*58b9f456SAndroid Build Coastguard Worker#else  // _LIBCPP_CXX03_LANG
674*58b9f456SAndroid Build Coastguard Worker
675*58b9f456SAndroid Build Coastguard Workertemplate <class _T1, class _T2>
676*58b9f456SAndroid Build Coastguard Workerinline _LIBCPP_INLINE_VISIBILITY
677*58b9f456SAndroid Build Coastguard Workerpair<_T1,_T2>
678*58b9f456SAndroid Build Coastguard Workermake_pair(_T1 __x, _T2 __y)
679*58b9f456SAndroid Build Coastguard Worker{
680*58b9f456SAndroid Build Coastguard Worker    return pair<_T1, _T2>(__x, __y);
681*58b9f456SAndroid Build Coastguard Worker}
682*58b9f456SAndroid Build Coastguard Worker
683*58b9f456SAndroid Build Coastguard Worker#endif  // _LIBCPP_CXX03_LANG
684*58b9f456SAndroid Build Coastguard Worker
685*58b9f456SAndroid Build Coastguard Workertemplate <class _T1, class _T2>
686*58b9f456SAndroid Build Coastguard Worker  struct _LIBCPP_TEMPLATE_VIS tuple_size<pair<_T1, _T2> >
687*58b9f456SAndroid Build Coastguard Worker    : public integral_constant<size_t, 2> {};
688*58b9f456SAndroid Build Coastguard Worker
689*58b9f456SAndroid Build Coastguard Workertemplate <size_t _Ip, class _T1, class _T2>
690*58b9f456SAndroid Build Coastguard Workerclass _LIBCPP_TEMPLATE_VIS tuple_element<_Ip, pair<_T1, _T2> >
691*58b9f456SAndroid Build Coastguard Worker{
692*58b9f456SAndroid Build Coastguard Worker    static_assert(_Ip < 2, "Index out of bounds in std::tuple_element<std::pair<T1, T2>>");
693*58b9f456SAndroid Build Coastguard Worker};
694*58b9f456SAndroid Build Coastguard Worker
695*58b9f456SAndroid Build Coastguard Workertemplate <class _T1, class _T2>
696*58b9f456SAndroid Build Coastguard Workerclass _LIBCPP_TEMPLATE_VIS tuple_element<0, pair<_T1, _T2> >
697*58b9f456SAndroid Build Coastguard Worker{
698*58b9f456SAndroid Build Coastguard Workerpublic:
699*58b9f456SAndroid Build Coastguard Worker    typedef _T1 type;
700*58b9f456SAndroid Build Coastguard Worker};
701*58b9f456SAndroid Build Coastguard Worker
702*58b9f456SAndroid Build Coastguard Workertemplate <class _T1, class _T2>
703*58b9f456SAndroid Build Coastguard Workerclass _LIBCPP_TEMPLATE_VIS tuple_element<1, pair<_T1, _T2> >
704*58b9f456SAndroid Build Coastguard Worker{
705*58b9f456SAndroid Build Coastguard Workerpublic:
706*58b9f456SAndroid Build Coastguard Worker    typedef _T2 type;
707*58b9f456SAndroid Build Coastguard Worker};
708*58b9f456SAndroid Build Coastguard Worker
709*58b9f456SAndroid Build Coastguard Workertemplate <size_t _Ip> struct __get_pair;
710*58b9f456SAndroid Build Coastguard Worker
711*58b9f456SAndroid Build Coastguard Workertemplate <>
712*58b9f456SAndroid Build Coastguard Workerstruct __get_pair<0>
713*58b9f456SAndroid Build Coastguard Worker{
714*58b9f456SAndroid Build Coastguard Worker    template <class _T1, class _T2>
715*58b9f456SAndroid Build Coastguard Worker    static
716*58b9f456SAndroid Build Coastguard Worker    _LIBCPP_INLINE_VISIBILITY _LIBCPP_CONSTEXPR_AFTER_CXX11
717*58b9f456SAndroid Build Coastguard Worker    _T1&
718*58b9f456SAndroid Build Coastguard Worker    get(pair<_T1, _T2>& __p) _NOEXCEPT {return __p.first;}
719*58b9f456SAndroid Build Coastguard Worker
720*58b9f456SAndroid Build Coastguard Worker    template <class _T1, class _T2>
721*58b9f456SAndroid Build Coastguard Worker    static
722*58b9f456SAndroid Build Coastguard Worker    _LIBCPP_INLINE_VISIBILITY _LIBCPP_CONSTEXPR_AFTER_CXX11
723*58b9f456SAndroid Build Coastguard Worker    const _T1&
724*58b9f456SAndroid Build Coastguard Worker    get(const pair<_T1, _T2>& __p) _NOEXCEPT {return __p.first;}
725*58b9f456SAndroid Build Coastguard Worker
726*58b9f456SAndroid Build Coastguard Worker#ifndef _LIBCPP_CXX03_LANG
727*58b9f456SAndroid Build Coastguard Worker    template <class _T1, class _T2>
728*58b9f456SAndroid Build Coastguard Worker    static
729*58b9f456SAndroid Build Coastguard Worker    _LIBCPP_INLINE_VISIBILITY _LIBCPP_CONSTEXPR_AFTER_CXX11
730*58b9f456SAndroid Build Coastguard Worker    _T1&&
731*58b9f456SAndroid Build Coastguard Worker    get(pair<_T1, _T2>&& __p) _NOEXCEPT {return _VSTD::forward<_T1>(__p.first);}
732*58b9f456SAndroid Build Coastguard Worker
733*58b9f456SAndroid Build Coastguard Worker    template <class _T1, class _T2>
734*58b9f456SAndroid Build Coastguard Worker    static
735*58b9f456SAndroid Build Coastguard Worker    _LIBCPP_INLINE_VISIBILITY _LIBCPP_CONSTEXPR_AFTER_CXX11
736*58b9f456SAndroid Build Coastguard Worker    const _T1&&
737*58b9f456SAndroid Build Coastguard Worker    get(const pair<_T1, _T2>&& __p) _NOEXCEPT {return _VSTD::forward<const _T1>(__p.first);}
738*58b9f456SAndroid Build Coastguard Worker#endif  // _LIBCPP_CXX03_LANG
739*58b9f456SAndroid Build Coastguard Worker};
740*58b9f456SAndroid Build Coastguard Worker
741*58b9f456SAndroid Build Coastguard Workertemplate <>
742*58b9f456SAndroid Build Coastguard Workerstruct __get_pair<1>
743*58b9f456SAndroid Build Coastguard Worker{
744*58b9f456SAndroid Build Coastguard Worker    template <class _T1, class _T2>
745*58b9f456SAndroid Build Coastguard Worker    static
746*58b9f456SAndroid Build Coastguard Worker    _LIBCPP_INLINE_VISIBILITY _LIBCPP_CONSTEXPR_AFTER_CXX11
747*58b9f456SAndroid Build Coastguard Worker    _T2&
748*58b9f456SAndroid Build Coastguard Worker    get(pair<_T1, _T2>& __p) _NOEXCEPT {return __p.second;}
749*58b9f456SAndroid Build Coastguard Worker
750*58b9f456SAndroid Build Coastguard Worker    template <class _T1, class _T2>
751*58b9f456SAndroid Build Coastguard Worker    static
752*58b9f456SAndroid Build Coastguard Worker    _LIBCPP_INLINE_VISIBILITY _LIBCPP_CONSTEXPR_AFTER_CXX11
753*58b9f456SAndroid Build Coastguard Worker    const _T2&
754*58b9f456SAndroid Build Coastguard Worker    get(const pair<_T1, _T2>& __p) _NOEXCEPT {return __p.second;}
755*58b9f456SAndroid Build Coastguard Worker
756*58b9f456SAndroid Build Coastguard Worker#ifndef _LIBCPP_CXX03_LANG
757*58b9f456SAndroid Build Coastguard Worker    template <class _T1, class _T2>
758*58b9f456SAndroid Build Coastguard Worker    static
759*58b9f456SAndroid Build Coastguard Worker    _LIBCPP_INLINE_VISIBILITY _LIBCPP_CONSTEXPR_AFTER_CXX11
760*58b9f456SAndroid Build Coastguard Worker    _T2&&
761*58b9f456SAndroid Build Coastguard Worker    get(pair<_T1, _T2>&& __p) _NOEXCEPT {return _VSTD::forward<_T2>(__p.second);}
762*58b9f456SAndroid Build Coastguard Worker
763*58b9f456SAndroid Build Coastguard Worker    template <class _T1, class _T2>
764*58b9f456SAndroid Build Coastguard Worker    static
765*58b9f456SAndroid Build Coastguard Worker    _LIBCPP_INLINE_VISIBILITY _LIBCPP_CONSTEXPR_AFTER_CXX11
766*58b9f456SAndroid Build Coastguard Worker    const _T2&&
767*58b9f456SAndroid Build Coastguard Worker    get(const pair<_T1, _T2>&& __p) _NOEXCEPT {return _VSTD::forward<const _T2>(__p.second);}
768*58b9f456SAndroid Build Coastguard Worker#endif  // _LIBCPP_CXX03_LANG
769*58b9f456SAndroid Build Coastguard Worker};
770*58b9f456SAndroid Build Coastguard Worker
771*58b9f456SAndroid Build Coastguard Workertemplate <size_t _Ip, class _T1, class _T2>
772*58b9f456SAndroid Build Coastguard Workerinline _LIBCPP_INLINE_VISIBILITY _LIBCPP_CONSTEXPR_AFTER_CXX11
773*58b9f456SAndroid Build Coastguard Workertypename tuple_element<_Ip, pair<_T1, _T2> >::type&
774*58b9f456SAndroid Build Coastguard Workerget(pair<_T1, _T2>& __p) _NOEXCEPT
775*58b9f456SAndroid Build Coastguard Worker{
776*58b9f456SAndroid Build Coastguard Worker    return __get_pair<_Ip>::get(__p);
777*58b9f456SAndroid Build Coastguard Worker}
778*58b9f456SAndroid Build Coastguard Worker
779*58b9f456SAndroid Build Coastguard Workertemplate <size_t _Ip, class _T1, class _T2>
780*58b9f456SAndroid Build Coastguard Workerinline _LIBCPP_INLINE_VISIBILITY _LIBCPP_CONSTEXPR_AFTER_CXX11
781*58b9f456SAndroid Build Coastguard Workerconst typename tuple_element<_Ip, pair<_T1, _T2> >::type&
782*58b9f456SAndroid Build Coastguard Workerget(const pair<_T1, _T2>& __p) _NOEXCEPT
783*58b9f456SAndroid Build Coastguard Worker{
784*58b9f456SAndroid Build Coastguard Worker    return __get_pair<_Ip>::get(__p);
785*58b9f456SAndroid Build Coastguard Worker}
786*58b9f456SAndroid Build Coastguard Worker
787*58b9f456SAndroid Build Coastguard Worker#ifndef _LIBCPP_CXX03_LANG
788*58b9f456SAndroid Build Coastguard Workertemplate <size_t _Ip, class _T1, class _T2>
789*58b9f456SAndroid Build Coastguard Workerinline _LIBCPP_INLINE_VISIBILITY _LIBCPP_CONSTEXPR_AFTER_CXX11
790*58b9f456SAndroid Build Coastguard Workertypename tuple_element<_Ip, pair<_T1, _T2> >::type&&
791*58b9f456SAndroid Build Coastguard Workerget(pair<_T1, _T2>&& __p) _NOEXCEPT
792*58b9f456SAndroid Build Coastguard Worker{
793*58b9f456SAndroid Build Coastguard Worker    return __get_pair<_Ip>::get(_VSTD::move(__p));
794*58b9f456SAndroid Build Coastguard Worker}
795*58b9f456SAndroid Build Coastguard Worker
796*58b9f456SAndroid Build Coastguard Workertemplate <size_t _Ip, class _T1, class _T2>
797*58b9f456SAndroid Build Coastguard Workerinline _LIBCPP_INLINE_VISIBILITY _LIBCPP_CONSTEXPR_AFTER_CXX11
798*58b9f456SAndroid Build Coastguard Workerconst typename tuple_element<_Ip, pair<_T1, _T2> >::type&&
799*58b9f456SAndroid Build Coastguard Workerget(const pair<_T1, _T2>&& __p) _NOEXCEPT
800*58b9f456SAndroid Build Coastguard Worker{
801*58b9f456SAndroid Build Coastguard Worker    return __get_pair<_Ip>::get(_VSTD::move(__p));
802*58b9f456SAndroid Build Coastguard Worker}
803*58b9f456SAndroid Build Coastguard Worker#endif  // _LIBCPP_CXX03_LANG
804*58b9f456SAndroid Build Coastguard Worker
805*58b9f456SAndroid Build Coastguard Worker#if _LIBCPP_STD_VER > 11
806*58b9f456SAndroid Build Coastguard Workertemplate <class _T1, class _T2>
807*58b9f456SAndroid Build Coastguard Workerinline _LIBCPP_INLINE_VISIBILITY
808*58b9f456SAndroid Build Coastguard Workerconstexpr _T1 & get(pair<_T1, _T2>& __p) _NOEXCEPT
809*58b9f456SAndroid Build Coastguard Worker{
810*58b9f456SAndroid Build Coastguard Worker    return __get_pair<0>::get(__p);
811*58b9f456SAndroid Build Coastguard Worker}
812*58b9f456SAndroid Build Coastguard Worker
813*58b9f456SAndroid Build Coastguard Workertemplate <class _T1, class _T2>
814*58b9f456SAndroid Build Coastguard Workerinline _LIBCPP_INLINE_VISIBILITY
815*58b9f456SAndroid Build Coastguard Workerconstexpr _T1 const & get(pair<_T1, _T2> const& __p) _NOEXCEPT
816*58b9f456SAndroid Build Coastguard Worker{
817*58b9f456SAndroid Build Coastguard Worker    return __get_pair<0>::get(__p);
818*58b9f456SAndroid Build Coastguard Worker}
819*58b9f456SAndroid Build Coastguard Worker
820*58b9f456SAndroid Build Coastguard Workertemplate <class _T1, class _T2>
821*58b9f456SAndroid Build Coastguard Workerinline _LIBCPP_INLINE_VISIBILITY
822*58b9f456SAndroid Build Coastguard Workerconstexpr _T1 && get(pair<_T1, _T2>&& __p) _NOEXCEPT
823*58b9f456SAndroid Build Coastguard Worker{
824*58b9f456SAndroid Build Coastguard Worker    return __get_pair<0>::get(_VSTD::move(__p));
825*58b9f456SAndroid Build Coastguard Worker}
826*58b9f456SAndroid Build Coastguard Worker
827*58b9f456SAndroid Build Coastguard Workertemplate <class _T1, class _T2>
828*58b9f456SAndroid Build Coastguard Workerinline _LIBCPP_INLINE_VISIBILITY
829*58b9f456SAndroid Build Coastguard Workerconstexpr _T1 const && get(pair<_T1, _T2> const&& __p) _NOEXCEPT
830*58b9f456SAndroid Build Coastguard Worker{
831*58b9f456SAndroid Build Coastguard Worker    return __get_pair<0>::get(_VSTD::move(__p));
832*58b9f456SAndroid Build Coastguard Worker}
833*58b9f456SAndroid Build Coastguard Worker
834*58b9f456SAndroid Build Coastguard Workertemplate <class _T1, class _T2>
835*58b9f456SAndroid Build Coastguard Workerinline _LIBCPP_INLINE_VISIBILITY
836*58b9f456SAndroid Build Coastguard Workerconstexpr _T1 & get(pair<_T2, _T1>& __p) _NOEXCEPT
837*58b9f456SAndroid Build Coastguard Worker{
838*58b9f456SAndroid Build Coastguard Worker    return __get_pair<1>::get(__p);
839*58b9f456SAndroid Build Coastguard Worker}
840*58b9f456SAndroid Build Coastguard Worker
841*58b9f456SAndroid Build Coastguard Workertemplate <class _T1, class _T2>
842*58b9f456SAndroid Build Coastguard Workerinline _LIBCPP_INLINE_VISIBILITY
843*58b9f456SAndroid Build Coastguard Workerconstexpr _T1 const & get(pair<_T2, _T1> const& __p) _NOEXCEPT
844*58b9f456SAndroid Build Coastguard Worker{
845*58b9f456SAndroid Build Coastguard Worker    return __get_pair<1>::get(__p);
846*58b9f456SAndroid Build Coastguard Worker}
847*58b9f456SAndroid Build Coastguard Worker
848*58b9f456SAndroid Build Coastguard Workertemplate <class _T1, class _T2>
849*58b9f456SAndroid Build Coastguard Workerinline _LIBCPP_INLINE_VISIBILITY
850*58b9f456SAndroid Build Coastguard Workerconstexpr _T1 && get(pair<_T2, _T1>&& __p) _NOEXCEPT
851*58b9f456SAndroid Build Coastguard Worker{
852*58b9f456SAndroid Build Coastguard Worker    return __get_pair<1>::get(_VSTD::move(__p));
853*58b9f456SAndroid Build Coastguard Worker}
854*58b9f456SAndroid Build Coastguard Worker
855*58b9f456SAndroid Build Coastguard Workertemplate <class _T1, class _T2>
856*58b9f456SAndroid Build Coastguard Workerinline _LIBCPP_INLINE_VISIBILITY
857*58b9f456SAndroid Build Coastguard Workerconstexpr _T1 const && get(pair<_T2, _T1> const&& __p) _NOEXCEPT
858*58b9f456SAndroid Build Coastguard Worker{
859*58b9f456SAndroid Build Coastguard Worker    return __get_pair<1>::get(_VSTD::move(__p));
860*58b9f456SAndroid Build Coastguard Worker}
861*58b9f456SAndroid Build Coastguard Worker
862*58b9f456SAndroid Build Coastguard Worker#endif
863*58b9f456SAndroid Build Coastguard Worker
864*58b9f456SAndroid Build Coastguard Worker#if _LIBCPP_STD_VER > 11
865*58b9f456SAndroid Build Coastguard Worker
866*58b9f456SAndroid Build Coastguard Workertemplate<class _Tp, _Tp... _Ip>
867*58b9f456SAndroid Build Coastguard Workerstruct _LIBCPP_TEMPLATE_VIS integer_sequence
868*58b9f456SAndroid Build Coastguard Worker{
869*58b9f456SAndroid Build Coastguard Worker    typedef _Tp value_type;
870*58b9f456SAndroid Build Coastguard Worker    static_assert( is_integral<_Tp>::value,
871*58b9f456SAndroid Build Coastguard Worker                  "std::integer_sequence can only be instantiated with an integral type" );
872*58b9f456SAndroid Build Coastguard Worker    static
873*58b9f456SAndroid Build Coastguard Worker    _LIBCPP_INLINE_VISIBILITY
874*58b9f456SAndroid Build Coastguard Worker    constexpr
875*58b9f456SAndroid Build Coastguard Worker    size_t
876*58b9f456SAndroid Build Coastguard Worker    size() noexcept { return sizeof...(_Ip); }
877*58b9f456SAndroid Build Coastguard Worker};
878*58b9f456SAndroid Build Coastguard Worker
879*58b9f456SAndroid Build Coastguard Workertemplate<size_t... _Ip>
880*58b9f456SAndroid Build Coastguard Worker    using index_sequence = integer_sequence<size_t, _Ip...>;
881*58b9f456SAndroid Build Coastguard Worker
882*58b9f456SAndroid Build Coastguard Worker#if __has_builtin(__make_integer_seq) && !defined(_LIBCPP_TESTING_FALLBACK_MAKE_INTEGER_SEQUENCE)
883*58b9f456SAndroid Build Coastguard Worker
884*58b9f456SAndroid Build Coastguard Workertemplate <class _Tp, _Tp _Ep>
885*58b9f456SAndroid Build Coastguard Workerusing __make_integer_sequence = __make_integer_seq<integer_sequence, _Tp, _Ep>;
886*58b9f456SAndroid Build Coastguard Worker
887*58b9f456SAndroid Build Coastguard Worker#else
888*58b9f456SAndroid Build Coastguard Worker
889*58b9f456SAndroid Build Coastguard Workertemplate<typename _Tp, _Tp _Np> using __make_integer_sequence_unchecked =
890*58b9f456SAndroid Build Coastguard Worker  typename __detail::__make<_Np>::type::template __convert<integer_sequence, _Tp>;
891*58b9f456SAndroid Build Coastguard Worker
892*58b9f456SAndroid Build Coastguard Workertemplate <class _Tp, _Tp _Ep>
893*58b9f456SAndroid Build Coastguard Workerstruct __make_integer_sequence_checked
894*58b9f456SAndroid Build Coastguard Worker{
895*58b9f456SAndroid Build Coastguard Worker    static_assert(is_integral<_Tp>::value,
896*58b9f456SAndroid Build Coastguard Worker                  "std::make_integer_sequence can only be instantiated with an integral type" );
897*58b9f456SAndroid Build Coastguard Worker    static_assert(0 <= _Ep, "std::make_integer_sequence must have a non-negative sequence length");
898*58b9f456SAndroid Build Coastguard Worker    // Workaround GCC bug by preventing bad installations when 0 <= _Ep
899*58b9f456SAndroid Build Coastguard Worker    // https://gcc.gnu.org/bugzilla/show_bug.cgi?id=68929
900*58b9f456SAndroid Build Coastguard Worker    typedef __make_integer_sequence_unchecked<_Tp, 0 <= _Ep ? _Ep : 0> type;
901*58b9f456SAndroid Build Coastguard Worker};
902*58b9f456SAndroid Build Coastguard Worker
903*58b9f456SAndroid Build Coastguard Workertemplate <class _Tp, _Tp _Ep>
904*58b9f456SAndroid Build Coastguard Workerusing __make_integer_sequence = typename __make_integer_sequence_checked<_Tp, _Ep>::type;
905*58b9f456SAndroid Build Coastguard Worker
906*58b9f456SAndroid Build Coastguard Worker#endif
907*58b9f456SAndroid Build Coastguard Worker
908*58b9f456SAndroid Build Coastguard Workertemplate<class _Tp, _Tp _Np>
909*58b9f456SAndroid Build Coastguard Worker    using make_integer_sequence = __make_integer_sequence<_Tp, _Np>;
910*58b9f456SAndroid Build Coastguard Worker
911*58b9f456SAndroid Build Coastguard Workertemplate<size_t _Np>
912*58b9f456SAndroid Build Coastguard Worker    using make_index_sequence = make_integer_sequence<size_t, _Np>;
913*58b9f456SAndroid Build Coastguard Worker
914*58b9f456SAndroid Build Coastguard Workertemplate<class... _Tp>
915*58b9f456SAndroid Build Coastguard Worker    using index_sequence_for = make_index_sequence<sizeof...(_Tp)>;
916*58b9f456SAndroid Build Coastguard Worker
917*58b9f456SAndroid Build Coastguard Worker#endif  // _LIBCPP_STD_VER > 11
918*58b9f456SAndroid Build Coastguard Worker
919*58b9f456SAndroid Build Coastguard Worker#if _LIBCPP_STD_VER > 11
920*58b9f456SAndroid Build Coastguard Workertemplate<class _T1, class _T2 = _T1>
921*58b9f456SAndroid Build Coastguard Workerinline _LIBCPP_INLINE_VISIBILITY _LIBCPP_CONSTEXPR_AFTER_CXX17
922*58b9f456SAndroid Build Coastguard Worker_T1 exchange(_T1& __obj, _T2 && __new_value)
923*58b9f456SAndroid Build Coastguard Worker{
924*58b9f456SAndroid Build Coastguard Worker    _T1 __old_value = _VSTD::move(__obj);
925*58b9f456SAndroid Build Coastguard Worker    __obj = _VSTD::forward<_T2>(__new_value);
926*58b9f456SAndroid Build Coastguard Worker    return __old_value;
927*58b9f456SAndroid Build Coastguard Worker}
928*58b9f456SAndroid Build Coastguard Worker#endif  // _LIBCPP_STD_VER > 11
929*58b9f456SAndroid Build Coastguard Worker
930*58b9f456SAndroid Build Coastguard Worker#if _LIBCPP_STD_VER > 14
931*58b9f456SAndroid Build Coastguard Worker
932*58b9f456SAndroid Build Coastguard Workerstruct _LIBCPP_TYPE_VIS in_place_t {
933*58b9f456SAndroid Build Coastguard Worker    explicit in_place_t() = default;
934*58b9f456SAndroid Build Coastguard Worker};
935*58b9f456SAndroid Build Coastguard Worker_LIBCPP_INLINE_VAR constexpr in_place_t in_place{};
936*58b9f456SAndroid Build Coastguard Worker
937*58b9f456SAndroid Build Coastguard Workertemplate <class _Tp>
938*58b9f456SAndroid Build Coastguard Workerstruct _LIBCPP_TEMPLATE_VIS in_place_type_t {
939*58b9f456SAndroid Build Coastguard Worker    explicit in_place_type_t() = default;
940*58b9f456SAndroid Build Coastguard Worker};
941*58b9f456SAndroid Build Coastguard Workertemplate <class _Tp>
942*58b9f456SAndroid Build Coastguard Worker_LIBCPP_INLINE_VAR constexpr in_place_type_t<_Tp> in_place_type{};
943*58b9f456SAndroid Build Coastguard Worker
944*58b9f456SAndroid Build Coastguard Workertemplate <size_t _Idx>
945*58b9f456SAndroid Build Coastguard Workerstruct _LIBCPP_TYPE_VIS in_place_index_t {
946*58b9f456SAndroid Build Coastguard Worker    explicit in_place_index_t() = default;
947*58b9f456SAndroid Build Coastguard Worker};
948*58b9f456SAndroid Build Coastguard Workertemplate <size_t _Idx>
949*58b9f456SAndroid Build Coastguard Worker_LIBCPP_INLINE_VAR constexpr in_place_index_t<_Idx> in_place_index{};
950*58b9f456SAndroid Build Coastguard Worker
951*58b9f456SAndroid Build Coastguard Workertemplate <class _Tp> struct __is_inplace_type_imp : false_type {};
952*58b9f456SAndroid Build Coastguard Workertemplate <class _Tp> struct __is_inplace_type_imp<in_place_type_t<_Tp>> : true_type {};
953*58b9f456SAndroid Build Coastguard Worker
954*58b9f456SAndroid Build Coastguard Workertemplate <class _Tp>
955*58b9f456SAndroid Build Coastguard Workerusing __is_inplace_type = __is_inplace_type_imp<__uncvref_t<_Tp>>;
956*58b9f456SAndroid Build Coastguard Worker
957*58b9f456SAndroid Build Coastguard Workertemplate <class _Tp> struct __is_inplace_index_imp : false_type {};
958*58b9f456SAndroid Build Coastguard Workertemplate <size_t _Idx> struct __is_inplace_index_imp<in_place_index_t<_Idx>> : true_type {};
959*58b9f456SAndroid Build Coastguard Worker
960*58b9f456SAndroid Build Coastguard Workertemplate <class _Tp>
961*58b9f456SAndroid Build Coastguard Workerusing __is_inplace_index = __is_inplace_index_imp<__uncvref_t<_Tp>>;
962*58b9f456SAndroid Build Coastguard Worker
963*58b9f456SAndroid Build Coastguard Worker#endif // _LIBCPP_STD_VER > 14
964*58b9f456SAndroid Build Coastguard Worker
965*58b9f456SAndroid Build Coastguard Workertemplate <class _Arg, class _Result>
966*58b9f456SAndroid Build Coastguard Workerstruct _LIBCPP_TEMPLATE_VIS unary_function
967*58b9f456SAndroid Build Coastguard Worker{
968*58b9f456SAndroid Build Coastguard Worker    typedef _Arg    argument_type;
969*58b9f456SAndroid Build Coastguard Worker    typedef _Result result_type;
970*58b9f456SAndroid Build Coastguard Worker};
971*58b9f456SAndroid Build Coastguard Worker
972*58b9f456SAndroid Build Coastguard Workertemplate <class _Size>
973*58b9f456SAndroid Build Coastguard Workerinline _LIBCPP_INLINE_VISIBILITY
974*58b9f456SAndroid Build Coastguard Worker_Size
975*58b9f456SAndroid Build Coastguard Worker__loadword(const void* __p)
976*58b9f456SAndroid Build Coastguard Worker{
977*58b9f456SAndroid Build Coastguard Worker    _Size __r;
978*58b9f456SAndroid Build Coastguard Worker    std::memcpy(&__r, __p, sizeof(__r));
979*58b9f456SAndroid Build Coastguard Worker    return __r;
980*58b9f456SAndroid Build Coastguard Worker}
981*58b9f456SAndroid Build Coastguard Worker
982*58b9f456SAndroid Build Coastguard Worker// We use murmur2 when size_t is 32 bits, and cityhash64 when size_t
983*58b9f456SAndroid Build Coastguard Worker// is 64 bits.  This is because cityhash64 uses 64bit x 64bit
984*58b9f456SAndroid Build Coastguard Worker// multiplication, which can be very slow on 32-bit systems.
985*58b9f456SAndroid Build Coastguard Workertemplate <class _Size, size_t = sizeof(_Size)*__CHAR_BIT__>
986*58b9f456SAndroid Build Coastguard Workerstruct __murmur2_or_cityhash;
987*58b9f456SAndroid Build Coastguard Worker
988*58b9f456SAndroid Build Coastguard Workertemplate <class _Size>
989*58b9f456SAndroid Build Coastguard Workerstruct __murmur2_or_cityhash<_Size, 32>
990*58b9f456SAndroid Build Coastguard Worker{
991*58b9f456SAndroid Build Coastguard Worker    inline _Size operator()(const void* __key, _Size __len)
992*58b9f456SAndroid Build Coastguard Worker         _LIBCPP_DISABLE_UBSAN_UNSIGNED_INTEGER_CHECK;
993*58b9f456SAndroid Build Coastguard Worker};
994*58b9f456SAndroid Build Coastguard Worker
995*58b9f456SAndroid Build Coastguard Worker// murmur2
996*58b9f456SAndroid Build Coastguard Workertemplate <class _Size>
997*58b9f456SAndroid Build Coastguard Worker_Size
998*58b9f456SAndroid Build Coastguard Worker__murmur2_or_cityhash<_Size, 32>::operator()(const void* __key, _Size __len)
999*58b9f456SAndroid Build Coastguard Worker{
1000*58b9f456SAndroid Build Coastguard Worker    const _Size __m = 0x5bd1e995;
1001*58b9f456SAndroid Build Coastguard Worker    const _Size __r = 24;
1002*58b9f456SAndroid Build Coastguard Worker    _Size __h = __len;
1003*58b9f456SAndroid Build Coastguard Worker    const unsigned char* __data = static_cast<const unsigned char*>(__key);
1004*58b9f456SAndroid Build Coastguard Worker    for (; __len >= 4; __data += 4, __len -= 4)
1005*58b9f456SAndroid Build Coastguard Worker    {
1006*58b9f456SAndroid Build Coastguard Worker        _Size __k = __loadword<_Size>(__data);
1007*58b9f456SAndroid Build Coastguard Worker        __k *= __m;
1008*58b9f456SAndroid Build Coastguard Worker        __k ^= __k >> __r;
1009*58b9f456SAndroid Build Coastguard Worker        __k *= __m;
1010*58b9f456SAndroid Build Coastguard Worker        __h *= __m;
1011*58b9f456SAndroid Build Coastguard Worker        __h ^= __k;
1012*58b9f456SAndroid Build Coastguard Worker    }
1013*58b9f456SAndroid Build Coastguard Worker    switch (__len)
1014*58b9f456SAndroid Build Coastguard Worker    {
1015*58b9f456SAndroid Build Coastguard Worker    case 3:
1016*58b9f456SAndroid Build Coastguard Worker        __h ^= __data[2] << 16;
1017*58b9f456SAndroid Build Coastguard Worker        _LIBCPP_FALLTHROUGH();
1018*58b9f456SAndroid Build Coastguard Worker    case 2:
1019*58b9f456SAndroid Build Coastguard Worker        __h ^= __data[1] << 8;
1020*58b9f456SAndroid Build Coastguard Worker        _LIBCPP_FALLTHROUGH();
1021*58b9f456SAndroid Build Coastguard Worker    case 1:
1022*58b9f456SAndroid Build Coastguard Worker        __h ^= __data[0];
1023*58b9f456SAndroid Build Coastguard Worker        __h *= __m;
1024*58b9f456SAndroid Build Coastguard Worker    }
1025*58b9f456SAndroid Build Coastguard Worker    __h ^= __h >> 13;
1026*58b9f456SAndroid Build Coastguard Worker    __h *= __m;
1027*58b9f456SAndroid Build Coastguard Worker    __h ^= __h >> 15;
1028*58b9f456SAndroid Build Coastguard Worker    return __h;
1029*58b9f456SAndroid Build Coastguard Worker}
1030*58b9f456SAndroid Build Coastguard Worker
1031*58b9f456SAndroid Build Coastguard Workertemplate <class _Size>
1032*58b9f456SAndroid Build Coastguard Workerstruct __murmur2_or_cityhash<_Size, 64>
1033*58b9f456SAndroid Build Coastguard Worker{
1034*58b9f456SAndroid Build Coastguard Worker    inline _Size operator()(const void* __key, _Size __len)  _LIBCPP_DISABLE_UBSAN_UNSIGNED_INTEGER_CHECK;
1035*58b9f456SAndroid Build Coastguard Worker
1036*58b9f456SAndroid Build Coastguard Worker private:
1037*58b9f456SAndroid Build Coastguard Worker  // Some primes between 2^63 and 2^64.
1038*58b9f456SAndroid Build Coastguard Worker  static const _Size __k0 = 0xc3a5c85c97cb3127ULL;
1039*58b9f456SAndroid Build Coastguard Worker  static const _Size __k1 = 0xb492b66fbe98f273ULL;
1040*58b9f456SAndroid Build Coastguard Worker  static const _Size __k2 = 0x9ae16a3b2f90404fULL;
1041*58b9f456SAndroid Build Coastguard Worker  static const _Size __k3 = 0xc949d7c7509e6557ULL;
1042*58b9f456SAndroid Build Coastguard Worker
1043*58b9f456SAndroid Build Coastguard Worker  static _Size __rotate(_Size __val, int __shift) {
1044*58b9f456SAndroid Build Coastguard Worker    return __shift == 0 ? __val : ((__val >> __shift) | (__val << (64 - __shift)));
1045*58b9f456SAndroid Build Coastguard Worker  }
1046*58b9f456SAndroid Build Coastguard Worker
1047*58b9f456SAndroid Build Coastguard Worker  static _Size __rotate_by_at_least_1(_Size __val, int __shift) {
1048*58b9f456SAndroid Build Coastguard Worker    return (__val >> __shift) | (__val << (64 - __shift));
1049*58b9f456SAndroid Build Coastguard Worker  }
1050*58b9f456SAndroid Build Coastguard Worker
1051*58b9f456SAndroid Build Coastguard Worker  static _Size __shift_mix(_Size __val) {
1052*58b9f456SAndroid Build Coastguard Worker    return __val ^ (__val >> 47);
1053*58b9f456SAndroid Build Coastguard Worker  }
1054*58b9f456SAndroid Build Coastguard Worker
1055*58b9f456SAndroid Build Coastguard Worker  static _Size __hash_len_16(_Size __u, _Size __v)
1056*58b9f456SAndroid Build Coastguard Worker     _LIBCPP_DISABLE_UBSAN_UNSIGNED_INTEGER_CHECK
1057*58b9f456SAndroid Build Coastguard Worker  {
1058*58b9f456SAndroid Build Coastguard Worker    const _Size __mul = 0x9ddfea08eb382d69ULL;
1059*58b9f456SAndroid Build Coastguard Worker    _Size __a = (__u ^ __v) * __mul;
1060*58b9f456SAndroid Build Coastguard Worker    __a ^= (__a >> 47);
1061*58b9f456SAndroid Build Coastguard Worker    _Size __b = (__v ^ __a) * __mul;
1062*58b9f456SAndroid Build Coastguard Worker    __b ^= (__b >> 47);
1063*58b9f456SAndroid Build Coastguard Worker    __b *= __mul;
1064*58b9f456SAndroid Build Coastguard Worker    return __b;
1065*58b9f456SAndroid Build Coastguard Worker  }
1066*58b9f456SAndroid Build Coastguard Worker
1067*58b9f456SAndroid Build Coastguard Worker  static _Size __hash_len_0_to_16(const char* __s, _Size __len)
1068*58b9f456SAndroid Build Coastguard Worker     _LIBCPP_DISABLE_UBSAN_UNSIGNED_INTEGER_CHECK
1069*58b9f456SAndroid Build Coastguard Worker  {
1070*58b9f456SAndroid Build Coastguard Worker    if (__len > 8) {
1071*58b9f456SAndroid Build Coastguard Worker      const _Size __a = __loadword<_Size>(__s);
1072*58b9f456SAndroid Build Coastguard Worker      const _Size __b = __loadword<_Size>(__s + __len - 8);
1073*58b9f456SAndroid Build Coastguard Worker      return __hash_len_16(__a, __rotate_by_at_least_1(__b + __len, __len)) ^ __b;
1074*58b9f456SAndroid Build Coastguard Worker    }
1075*58b9f456SAndroid Build Coastguard Worker    if (__len >= 4) {
1076*58b9f456SAndroid Build Coastguard Worker      const uint32_t __a = __loadword<uint32_t>(__s);
1077*58b9f456SAndroid Build Coastguard Worker      const uint32_t __b = __loadword<uint32_t>(__s + __len - 4);
1078*58b9f456SAndroid Build Coastguard Worker      return __hash_len_16(__len + (__a << 3), __b);
1079*58b9f456SAndroid Build Coastguard Worker    }
1080*58b9f456SAndroid Build Coastguard Worker    if (__len > 0) {
1081*58b9f456SAndroid Build Coastguard Worker      const unsigned char __a = __s[0];
1082*58b9f456SAndroid Build Coastguard Worker      const unsigned char __b = __s[__len >> 1];
1083*58b9f456SAndroid Build Coastguard Worker      const unsigned char __c = __s[__len - 1];
1084*58b9f456SAndroid Build Coastguard Worker      const uint32_t __y = static_cast<uint32_t>(__a) +
1085*58b9f456SAndroid Build Coastguard Worker                           (static_cast<uint32_t>(__b) << 8);
1086*58b9f456SAndroid Build Coastguard Worker      const uint32_t __z = __len + (static_cast<uint32_t>(__c) << 2);
1087*58b9f456SAndroid Build Coastguard Worker      return __shift_mix(__y * __k2 ^ __z * __k3) * __k2;
1088*58b9f456SAndroid Build Coastguard Worker    }
1089*58b9f456SAndroid Build Coastguard Worker    return __k2;
1090*58b9f456SAndroid Build Coastguard Worker  }
1091*58b9f456SAndroid Build Coastguard Worker
1092*58b9f456SAndroid Build Coastguard Worker  static _Size __hash_len_17_to_32(const char *__s, _Size __len)
1093*58b9f456SAndroid Build Coastguard Worker     _LIBCPP_DISABLE_UBSAN_UNSIGNED_INTEGER_CHECK
1094*58b9f456SAndroid Build Coastguard Worker  {
1095*58b9f456SAndroid Build Coastguard Worker    const _Size __a = __loadword<_Size>(__s) * __k1;
1096*58b9f456SAndroid Build Coastguard Worker    const _Size __b = __loadword<_Size>(__s + 8);
1097*58b9f456SAndroid Build Coastguard Worker    const _Size __c = __loadword<_Size>(__s + __len - 8) * __k2;
1098*58b9f456SAndroid Build Coastguard Worker    const _Size __d = __loadword<_Size>(__s + __len - 16) * __k0;
1099*58b9f456SAndroid Build Coastguard Worker    return __hash_len_16(__rotate(__a - __b, 43) + __rotate(__c, 30) + __d,
1100*58b9f456SAndroid Build Coastguard Worker                         __a + __rotate(__b ^ __k3, 20) - __c + __len);
1101*58b9f456SAndroid Build Coastguard Worker  }
1102*58b9f456SAndroid Build Coastguard Worker
1103*58b9f456SAndroid Build Coastguard Worker  // Return a 16-byte hash for 48 bytes.  Quick and dirty.
1104*58b9f456SAndroid Build Coastguard Worker  // Callers do best to use "random-looking" values for a and b.
1105*58b9f456SAndroid Build Coastguard Worker  static pair<_Size, _Size> __weak_hash_len_32_with_seeds(
1106*58b9f456SAndroid Build Coastguard Worker      _Size __w, _Size __x, _Size __y, _Size __z, _Size __a, _Size __b)
1107*58b9f456SAndroid Build Coastguard Worker        _LIBCPP_DISABLE_UBSAN_UNSIGNED_INTEGER_CHECK
1108*58b9f456SAndroid Build Coastguard Worker  {
1109*58b9f456SAndroid Build Coastguard Worker    __a += __w;
1110*58b9f456SAndroid Build Coastguard Worker    __b = __rotate(__b + __a + __z, 21);
1111*58b9f456SAndroid Build Coastguard Worker    const _Size __c = __a;
1112*58b9f456SAndroid Build Coastguard Worker    __a += __x;
1113*58b9f456SAndroid Build Coastguard Worker    __a += __y;
1114*58b9f456SAndroid Build Coastguard Worker    __b += __rotate(__a, 44);
1115*58b9f456SAndroid Build Coastguard Worker    return pair<_Size, _Size>(__a + __z, __b + __c);
1116*58b9f456SAndroid Build Coastguard Worker  }
1117*58b9f456SAndroid Build Coastguard Worker
1118*58b9f456SAndroid Build Coastguard Worker  // Return a 16-byte hash for s[0] ... s[31], a, and b.  Quick and dirty.
1119*58b9f456SAndroid Build Coastguard Worker  static pair<_Size, _Size> __weak_hash_len_32_with_seeds(
1120*58b9f456SAndroid Build Coastguard Worker      const char* __s, _Size __a, _Size __b)
1121*58b9f456SAndroid Build Coastguard Worker    _LIBCPP_DISABLE_UBSAN_UNSIGNED_INTEGER_CHECK
1122*58b9f456SAndroid Build Coastguard Worker  {
1123*58b9f456SAndroid Build Coastguard Worker    return __weak_hash_len_32_with_seeds(__loadword<_Size>(__s),
1124*58b9f456SAndroid Build Coastguard Worker                                         __loadword<_Size>(__s + 8),
1125*58b9f456SAndroid Build Coastguard Worker                                         __loadword<_Size>(__s + 16),
1126*58b9f456SAndroid Build Coastguard Worker                                         __loadword<_Size>(__s + 24),
1127*58b9f456SAndroid Build Coastguard Worker                                         __a,
1128*58b9f456SAndroid Build Coastguard Worker                                         __b);
1129*58b9f456SAndroid Build Coastguard Worker  }
1130*58b9f456SAndroid Build Coastguard Worker
1131*58b9f456SAndroid Build Coastguard Worker  // Return an 8-byte hash for 33 to 64 bytes.
1132*58b9f456SAndroid Build Coastguard Worker  static _Size __hash_len_33_to_64(const char *__s, size_t __len)
1133*58b9f456SAndroid Build Coastguard Worker    _LIBCPP_DISABLE_UBSAN_UNSIGNED_INTEGER_CHECK
1134*58b9f456SAndroid Build Coastguard Worker  {
1135*58b9f456SAndroid Build Coastguard Worker    _Size __z = __loadword<_Size>(__s + 24);
1136*58b9f456SAndroid Build Coastguard Worker    _Size __a = __loadword<_Size>(__s) +
1137*58b9f456SAndroid Build Coastguard Worker                (__len + __loadword<_Size>(__s + __len - 16)) * __k0;
1138*58b9f456SAndroid Build Coastguard Worker    _Size __b = __rotate(__a + __z, 52);
1139*58b9f456SAndroid Build Coastguard Worker    _Size __c = __rotate(__a, 37);
1140*58b9f456SAndroid Build Coastguard Worker    __a += __loadword<_Size>(__s + 8);
1141*58b9f456SAndroid Build Coastguard Worker    __c += __rotate(__a, 7);
1142*58b9f456SAndroid Build Coastguard Worker    __a += __loadword<_Size>(__s + 16);
1143*58b9f456SAndroid Build Coastguard Worker    _Size __vf = __a + __z;
1144*58b9f456SAndroid Build Coastguard Worker    _Size __vs = __b + __rotate(__a, 31) + __c;
1145*58b9f456SAndroid Build Coastguard Worker    __a = __loadword<_Size>(__s + 16) + __loadword<_Size>(__s + __len - 32);
1146*58b9f456SAndroid Build Coastguard Worker    __z += __loadword<_Size>(__s + __len - 8);
1147*58b9f456SAndroid Build Coastguard Worker    __b = __rotate(__a + __z, 52);
1148*58b9f456SAndroid Build Coastguard Worker    __c = __rotate(__a, 37);
1149*58b9f456SAndroid Build Coastguard Worker    __a += __loadword<_Size>(__s + __len - 24);
1150*58b9f456SAndroid Build Coastguard Worker    __c += __rotate(__a, 7);
1151*58b9f456SAndroid Build Coastguard Worker    __a += __loadword<_Size>(__s + __len - 16);
1152*58b9f456SAndroid Build Coastguard Worker    _Size __wf = __a + __z;
1153*58b9f456SAndroid Build Coastguard Worker    _Size __ws = __b + __rotate(__a, 31) + __c;
1154*58b9f456SAndroid Build Coastguard Worker    _Size __r = __shift_mix((__vf + __ws) * __k2 + (__wf + __vs) * __k0);
1155*58b9f456SAndroid Build Coastguard Worker    return __shift_mix(__r * __k0 + __vs) * __k2;
1156*58b9f456SAndroid Build Coastguard Worker  }
1157*58b9f456SAndroid Build Coastguard Worker};
1158*58b9f456SAndroid Build Coastguard Worker
1159*58b9f456SAndroid Build Coastguard Worker// cityhash64
1160*58b9f456SAndroid Build Coastguard Workertemplate <class _Size>
1161*58b9f456SAndroid Build Coastguard Worker_Size
1162*58b9f456SAndroid Build Coastguard Worker__murmur2_or_cityhash<_Size, 64>::operator()(const void* __key, _Size __len)
1163*58b9f456SAndroid Build Coastguard Worker{
1164*58b9f456SAndroid Build Coastguard Worker  const char* __s = static_cast<const char*>(__key);
1165*58b9f456SAndroid Build Coastguard Worker  if (__len <= 32) {
1166*58b9f456SAndroid Build Coastguard Worker    if (__len <= 16) {
1167*58b9f456SAndroid Build Coastguard Worker      return __hash_len_0_to_16(__s, __len);
1168*58b9f456SAndroid Build Coastguard Worker    } else {
1169*58b9f456SAndroid Build Coastguard Worker      return __hash_len_17_to_32(__s, __len);
1170*58b9f456SAndroid Build Coastguard Worker    }
1171*58b9f456SAndroid Build Coastguard Worker  } else if (__len <= 64) {
1172*58b9f456SAndroid Build Coastguard Worker    return __hash_len_33_to_64(__s, __len);
1173*58b9f456SAndroid Build Coastguard Worker  }
1174*58b9f456SAndroid Build Coastguard Worker
1175*58b9f456SAndroid Build Coastguard Worker  // For strings over 64 bytes we hash the end first, and then as we
1176*58b9f456SAndroid Build Coastguard Worker  // loop we keep 56 bytes of state: v, w, x, y, and z.
1177*58b9f456SAndroid Build Coastguard Worker  _Size __x = __loadword<_Size>(__s + __len - 40);
1178*58b9f456SAndroid Build Coastguard Worker  _Size __y = __loadword<_Size>(__s + __len - 16) +
1179*58b9f456SAndroid Build Coastguard Worker              __loadword<_Size>(__s + __len - 56);
1180*58b9f456SAndroid Build Coastguard Worker  _Size __z = __hash_len_16(__loadword<_Size>(__s + __len - 48) + __len,
1181*58b9f456SAndroid Build Coastguard Worker                          __loadword<_Size>(__s + __len - 24));
1182*58b9f456SAndroid Build Coastguard Worker  pair<_Size, _Size> __v = __weak_hash_len_32_with_seeds(__s + __len - 64, __len, __z);
1183*58b9f456SAndroid Build Coastguard Worker  pair<_Size, _Size> __w = __weak_hash_len_32_with_seeds(__s + __len - 32, __y + __k1, __x);
1184*58b9f456SAndroid Build Coastguard Worker  __x = __x * __k1 + __loadword<_Size>(__s);
1185*58b9f456SAndroid Build Coastguard Worker
1186*58b9f456SAndroid Build Coastguard Worker  // Decrease len to the nearest multiple of 64, and operate on 64-byte chunks.
1187*58b9f456SAndroid Build Coastguard Worker  __len = (__len - 1) & ~static_cast<_Size>(63);
1188*58b9f456SAndroid Build Coastguard Worker  do {
1189*58b9f456SAndroid Build Coastguard Worker    __x = __rotate(__x + __y + __v.first + __loadword<_Size>(__s + 8), 37) * __k1;
1190*58b9f456SAndroid Build Coastguard Worker    __y = __rotate(__y + __v.second + __loadword<_Size>(__s + 48), 42) * __k1;
1191*58b9f456SAndroid Build Coastguard Worker    __x ^= __w.second;
1192*58b9f456SAndroid Build Coastguard Worker    __y += __v.first + __loadword<_Size>(__s + 40);
1193*58b9f456SAndroid Build Coastguard Worker    __z = __rotate(__z + __w.first, 33) * __k1;
1194*58b9f456SAndroid Build Coastguard Worker    __v = __weak_hash_len_32_with_seeds(__s, __v.second * __k1, __x + __w.first);
1195*58b9f456SAndroid Build Coastguard Worker    __w = __weak_hash_len_32_with_seeds(__s + 32, __z + __w.second,
1196*58b9f456SAndroid Build Coastguard Worker                                        __y + __loadword<_Size>(__s + 16));
1197*58b9f456SAndroid Build Coastguard Worker    std::swap(__z, __x);
1198*58b9f456SAndroid Build Coastguard Worker    __s += 64;
1199*58b9f456SAndroid Build Coastguard Worker    __len -= 64;
1200*58b9f456SAndroid Build Coastguard Worker  } while (__len != 0);
1201*58b9f456SAndroid Build Coastguard Worker  return __hash_len_16(
1202*58b9f456SAndroid Build Coastguard Worker      __hash_len_16(__v.first, __w.first) + __shift_mix(__y) * __k1 + __z,
1203*58b9f456SAndroid Build Coastguard Worker      __hash_len_16(__v.second, __w.second) + __x);
1204*58b9f456SAndroid Build Coastguard Worker}
1205*58b9f456SAndroid Build Coastguard Worker
1206*58b9f456SAndroid Build Coastguard Workertemplate <class _Tp, size_t = sizeof(_Tp) / sizeof(size_t)>
1207*58b9f456SAndroid Build Coastguard Workerstruct __scalar_hash;
1208*58b9f456SAndroid Build Coastguard Worker
1209*58b9f456SAndroid Build Coastguard Workertemplate <class _Tp>
1210*58b9f456SAndroid Build Coastguard Workerstruct __scalar_hash<_Tp, 0>
1211*58b9f456SAndroid Build Coastguard Worker    : public unary_function<_Tp, size_t>
1212*58b9f456SAndroid Build Coastguard Worker{
1213*58b9f456SAndroid Build Coastguard Worker    _LIBCPP_INLINE_VISIBILITY
1214*58b9f456SAndroid Build Coastguard Worker    size_t operator()(_Tp __v) const _NOEXCEPT
1215*58b9f456SAndroid Build Coastguard Worker    {
1216*58b9f456SAndroid Build Coastguard Worker        union
1217*58b9f456SAndroid Build Coastguard Worker        {
1218*58b9f456SAndroid Build Coastguard Worker            _Tp    __t;
1219*58b9f456SAndroid Build Coastguard Worker            size_t __a;
1220*58b9f456SAndroid Build Coastguard Worker        } __u;
1221*58b9f456SAndroid Build Coastguard Worker        __u.__a = 0;
1222*58b9f456SAndroid Build Coastguard Worker        __u.__t = __v;
1223*58b9f456SAndroid Build Coastguard Worker        return __u.__a;
1224*58b9f456SAndroid Build Coastguard Worker    }
1225*58b9f456SAndroid Build Coastguard Worker};
1226*58b9f456SAndroid Build Coastguard Worker
1227*58b9f456SAndroid Build Coastguard Workertemplate <class _Tp>
1228*58b9f456SAndroid Build Coastguard Workerstruct __scalar_hash<_Tp, 1>
1229*58b9f456SAndroid Build Coastguard Worker    : public unary_function<_Tp, size_t>
1230*58b9f456SAndroid Build Coastguard Worker{
1231*58b9f456SAndroid Build Coastguard Worker    _LIBCPP_INLINE_VISIBILITY
1232*58b9f456SAndroid Build Coastguard Worker    size_t operator()(_Tp __v) const _NOEXCEPT
1233*58b9f456SAndroid Build Coastguard Worker    {
1234*58b9f456SAndroid Build Coastguard Worker        union
1235*58b9f456SAndroid Build Coastguard Worker        {
1236*58b9f456SAndroid Build Coastguard Worker            _Tp    __t;
1237*58b9f456SAndroid Build Coastguard Worker            size_t __a;
1238*58b9f456SAndroid Build Coastguard Worker        } __u;
1239*58b9f456SAndroid Build Coastguard Worker        __u.__t = __v;
1240*58b9f456SAndroid Build Coastguard Worker        return __u.__a;
1241*58b9f456SAndroid Build Coastguard Worker    }
1242*58b9f456SAndroid Build Coastguard Worker};
1243*58b9f456SAndroid Build Coastguard Worker
1244*58b9f456SAndroid Build Coastguard Workertemplate <class _Tp>
1245*58b9f456SAndroid Build Coastguard Workerstruct __scalar_hash<_Tp, 2>
1246*58b9f456SAndroid Build Coastguard Worker    : public unary_function<_Tp, size_t>
1247*58b9f456SAndroid Build Coastguard Worker{
1248*58b9f456SAndroid Build Coastguard Worker    _LIBCPP_INLINE_VISIBILITY
1249*58b9f456SAndroid Build Coastguard Worker    size_t operator()(_Tp __v) const _NOEXCEPT
1250*58b9f456SAndroid Build Coastguard Worker    {
1251*58b9f456SAndroid Build Coastguard Worker        union
1252*58b9f456SAndroid Build Coastguard Worker        {
1253*58b9f456SAndroid Build Coastguard Worker            _Tp __t;
1254*58b9f456SAndroid Build Coastguard Worker            struct
1255*58b9f456SAndroid Build Coastguard Worker            {
1256*58b9f456SAndroid Build Coastguard Worker                size_t __a;
1257*58b9f456SAndroid Build Coastguard Worker                size_t __b;
1258*58b9f456SAndroid Build Coastguard Worker            } __s;
1259*58b9f456SAndroid Build Coastguard Worker        } __u;
1260*58b9f456SAndroid Build Coastguard Worker        __u.__t = __v;
1261*58b9f456SAndroid Build Coastguard Worker        return __murmur2_or_cityhash<size_t>()(&__u, sizeof(__u));
1262*58b9f456SAndroid Build Coastguard Worker    }
1263*58b9f456SAndroid Build Coastguard Worker};
1264*58b9f456SAndroid Build Coastguard Worker
1265*58b9f456SAndroid Build Coastguard Workertemplate <class _Tp>
1266*58b9f456SAndroid Build Coastguard Workerstruct __scalar_hash<_Tp, 3>
1267*58b9f456SAndroid Build Coastguard Worker    : public unary_function<_Tp, size_t>
1268*58b9f456SAndroid Build Coastguard Worker{
1269*58b9f456SAndroid Build Coastguard Worker    _LIBCPP_INLINE_VISIBILITY
1270*58b9f456SAndroid Build Coastguard Worker    size_t operator()(_Tp __v) const _NOEXCEPT
1271*58b9f456SAndroid Build Coastguard Worker    {
1272*58b9f456SAndroid Build Coastguard Worker        union
1273*58b9f456SAndroid Build Coastguard Worker        {
1274*58b9f456SAndroid Build Coastguard Worker            _Tp __t;
1275*58b9f456SAndroid Build Coastguard Worker            struct
1276*58b9f456SAndroid Build Coastguard Worker            {
1277*58b9f456SAndroid Build Coastguard Worker                size_t __a;
1278*58b9f456SAndroid Build Coastguard Worker                size_t __b;
1279*58b9f456SAndroid Build Coastguard Worker                size_t __c;
1280*58b9f456SAndroid Build Coastguard Worker            } __s;
1281*58b9f456SAndroid Build Coastguard Worker        } __u;
1282*58b9f456SAndroid Build Coastguard Worker        __u.__t = __v;
1283*58b9f456SAndroid Build Coastguard Worker        return __murmur2_or_cityhash<size_t>()(&__u, sizeof(__u));
1284*58b9f456SAndroid Build Coastguard Worker    }
1285*58b9f456SAndroid Build Coastguard Worker};
1286*58b9f456SAndroid Build Coastguard Worker
1287*58b9f456SAndroid Build Coastguard Workertemplate <class _Tp>
1288*58b9f456SAndroid Build Coastguard Workerstruct __scalar_hash<_Tp, 4>
1289*58b9f456SAndroid Build Coastguard Worker    : public unary_function<_Tp, size_t>
1290*58b9f456SAndroid Build Coastguard Worker{
1291*58b9f456SAndroid Build Coastguard Worker    _LIBCPP_INLINE_VISIBILITY
1292*58b9f456SAndroid Build Coastguard Worker    size_t operator()(_Tp __v) const _NOEXCEPT
1293*58b9f456SAndroid Build Coastguard Worker    {
1294*58b9f456SAndroid Build Coastguard Worker        union
1295*58b9f456SAndroid Build Coastguard Worker        {
1296*58b9f456SAndroid Build Coastguard Worker            _Tp __t;
1297*58b9f456SAndroid Build Coastguard Worker            struct
1298*58b9f456SAndroid Build Coastguard Worker            {
1299*58b9f456SAndroid Build Coastguard Worker                size_t __a;
1300*58b9f456SAndroid Build Coastguard Worker                size_t __b;
1301*58b9f456SAndroid Build Coastguard Worker                size_t __c;
1302*58b9f456SAndroid Build Coastguard Worker                size_t __d;
1303*58b9f456SAndroid Build Coastguard Worker            } __s;
1304*58b9f456SAndroid Build Coastguard Worker        } __u;
1305*58b9f456SAndroid Build Coastguard Worker        __u.__t = __v;
1306*58b9f456SAndroid Build Coastguard Worker        return __murmur2_or_cityhash<size_t>()(&__u, sizeof(__u));
1307*58b9f456SAndroid Build Coastguard Worker    }
1308*58b9f456SAndroid Build Coastguard Worker};
1309*58b9f456SAndroid Build Coastguard Worker
1310*58b9f456SAndroid Build Coastguard Workerstruct _PairT {
1311*58b9f456SAndroid Build Coastguard Worker  size_t first;
1312*58b9f456SAndroid Build Coastguard Worker  size_t second;
1313*58b9f456SAndroid Build Coastguard Worker};
1314*58b9f456SAndroid Build Coastguard Worker
1315*58b9f456SAndroid Build Coastguard Worker_LIBCPP_INLINE_VISIBILITY
1316*58b9f456SAndroid Build Coastguard Workerinline size_t __hash_combine(size_t __lhs, size_t __rhs) _NOEXCEPT {
1317*58b9f456SAndroid Build Coastguard Worker    typedef __scalar_hash<_PairT> _HashT;
1318*58b9f456SAndroid Build Coastguard Worker    const _PairT __p = {__lhs, __rhs};
1319*58b9f456SAndroid Build Coastguard Worker    return _HashT()(__p);
1320*58b9f456SAndroid Build Coastguard Worker}
1321*58b9f456SAndroid Build Coastguard Worker
1322*58b9f456SAndroid Build Coastguard Workertemplate<class _Tp>
1323*58b9f456SAndroid Build Coastguard Workerstruct _LIBCPP_TEMPLATE_VIS hash<_Tp*>
1324*58b9f456SAndroid Build Coastguard Worker    : public unary_function<_Tp*, size_t>
1325*58b9f456SAndroid Build Coastguard Worker{
1326*58b9f456SAndroid Build Coastguard Worker    _LIBCPP_INLINE_VISIBILITY
1327*58b9f456SAndroid Build Coastguard Worker    size_t operator()(_Tp* __v) const _NOEXCEPT
1328*58b9f456SAndroid Build Coastguard Worker    {
1329*58b9f456SAndroid Build Coastguard Worker        union
1330*58b9f456SAndroid Build Coastguard Worker        {
1331*58b9f456SAndroid Build Coastguard Worker            _Tp* __t;
1332*58b9f456SAndroid Build Coastguard Worker            size_t __a;
1333*58b9f456SAndroid Build Coastguard Worker        } __u;
1334*58b9f456SAndroid Build Coastguard Worker        __u.__t = __v;
1335*58b9f456SAndroid Build Coastguard Worker        return __murmur2_or_cityhash<size_t>()(&__u, sizeof(__u));
1336*58b9f456SAndroid Build Coastguard Worker    }
1337*58b9f456SAndroid Build Coastguard Worker};
1338*58b9f456SAndroid Build Coastguard Worker
1339*58b9f456SAndroid Build Coastguard Worker
1340*58b9f456SAndroid Build Coastguard Workertemplate <>
1341*58b9f456SAndroid Build Coastguard Workerstruct _LIBCPP_TEMPLATE_VIS hash<bool>
1342*58b9f456SAndroid Build Coastguard Worker    : public unary_function<bool, size_t>
1343*58b9f456SAndroid Build Coastguard Worker{
1344*58b9f456SAndroid Build Coastguard Worker    _LIBCPP_INLINE_VISIBILITY
1345*58b9f456SAndroid Build Coastguard Worker    size_t operator()(bool __v) const _NOEXCEPT {return static_cast<size_t>(__v);}
1346*58b9f456SAndroid Build Coastguard Worker};
1347*58b9f456SAndroid Build Coastguard Worker
1348*58b9f456SAndroid Build Coastguard Workertemplate <>
1349*58b9f456SAndroid Build Coastguard Workerstruct _LIBCPP_TEMPLATE_VIS hash<char>
1350*58b9f456SAndroid Build Coastguard Worker    : public unary_function<char, size_t>
1351*58b9f456SAndroid Build Coastguard Worker{
1352*58b9f456SAndroid Build Coastguard Worker    _LIBCPP_INLINE_VISIBILITY
1353*58b9f456SAndroid Build Coastguard Worker    size_t operator()(char __v) const _NOEXCEPT {return static_cast<size_t>(__v);}
1354*58b9f456SAndroid Build Coastguard Worker};
1355*58b9f456SAndroid Build Coastguard Worker
1356*58b9f456SAndroid Build Coastguard Workertemplate <>
1357*58b9f456SAndroid Build Coastguard Workerstruct _LIBCPP_TEMPLATE_VIS hash<signed char>
1358*58b9f456SAndroid Build Coastguard Worker    : public unary_function<signed char, size_t>
1359*58b9f456SAndroid Build Coastguard Worker{
1360*58b9f456SAndroid Build Coastguard Worker    _LIBCPP_INLINE_VISIBILITY
1361*58b9f456SAndroid Build Coastguard Worker    size_t operator()(signed char __v) const _NOEXCEPT {return static_cast<size_t>(__v);}
1362*58b9f456SAndroid Build Coastguard Worker};
1363*58b9f456SAndroid Build Coastguard Worker
1364*58b9f456SAndroid Build Coastguard Workertemplate <>
1365*58b9f456SAndroid Build Coastguard Workerstruct _LIBCPP_TEMPLATE_VIS hash<unsigned char>
1366*58b9f456SAndroid Build Coastguard Worker    : public unary_function<unsigned char, size_t>
1367*58b9f456SAndroid Build Coastguard Worker{
1368*58b9f456SAndroid Build Coastguard Worker    _LIBCPP_INLINE_VISIBILITY
1369*58b9f456SAndroid Build Coastguard Worker    size_t operator()(unsigned char __v) const _NOEXCEPT {return static_cast<size_t>(__v);}
1370*58b9f456SAndroid Build Coastguard Worker};
1371*58b9f456SAndroid Build Coastguard Worker
1372*58b9f456SAndroid Build Coastguard Worker#ifndef _LIBCPP_HAS_NO_UNICODE_CHARS
1373*58b9f456SAndroid Build Coastguard Worker
1374*58b9f456SAndroid Build Coastguard Workertemplate <>
1375*58b9f456SAndroid Build Coastguard Workerstruct _LIBCPP_TEMPLATE_VIS hash<char16_t>
1376*58b9f456SAndroid Build Coastguard Worker    : public unary_function<char16_t, size_t>
1377*58b9f456SAndroid Build Coastguard Worker{
1378*58b9f456SAndroid Build Coastguard Worker    _LIBCPP_INLINE_VISIBILITY
1379*58b9f456SAndroid Build Coastguard Worker    size_t operator()(char16_t __v) const _NOEXCEPT {return static_cast<size_t>(__v);}
1380*58b9f456SAndroid Build Coastguard Worker};
1381*58b9f456SAndroid Build Coastguard Worker
1382*58b9f456SAndroid Build Coastguard Workertemplate <>
1383*58b9f456SAndroid Build Coastguard Workerstruct _LIBCPP_TEMPLATE_VIS hash<char32_t>
1384*58b9f456SAndroid Build Coastguard Worker    : public unary_function<char32_t, size_t>
1385*58b9f456SAndroid Build Coastguard Worker{
1386*58b9f456SAndroid Build Coastguard Worker    _LIBCPP_INLINE_VISIBILITY
1387*58b9f456SAndroid Build Coastguard Worker    size_t operator()(char32_t __v) const _NOEXCEPT {return static_cast<size_t>(__v);}
1388*58b9f456SAndroid Build Coastguard Worker};
1389*58b9f456SAndroid Build Coastguard Worker
1390*58b9f456SAndroid Build Coastguard Worker#endif  // _LIBCPP_HAS_NO_UNICODE_CHARS
1391*58b9f456SAndroid Build Coastguard Worker
1392*58b9f456SAndroid Build Coastguard Workertemplate <>
1393*58b9f456SAndroid Build Coastguard Workerstruct _LIBCPP_TEMPLATE_VIS hash<wchar_t>
1394*58b9f456SAndroid Build Coastguard Worker    : public unary_function<wchar_t, size_t>
1395*58b9f456SAndroid Build Coastguard Worker{
1396*58b9f456SAndroid Build Coastguard Worker    _LIBCPP_INLINE_VISIBILITY
1397*58b9f456SAndroid Build Coastguard Worker    size_t operator()(wchar_t __v) const _NOEXCEPT {return static_cast<size_t>(__v);}
1398*58b9f456SAndroid Build Coastguard Worker};
1399*58b9f456SAndroid Build Coastguard Worker
1400*58b9f456SAndroid Build Coastguard Workertemplate <>
1401*58b9f456SAndroid Build Coastguard Workerstruct _LIBCPP_TEMPLATE_VIS hash<short>
1402*58b9f456SAndroid Build Coastguard Worker    : public unary_function<short, size_t>
1403*58b9f456SAndroid Build Coastguard Worker{
1404*58b9f456SAndroid Build Coastguard Worker    _LIBCPP_INLINE_VISIBILITY
1405*58b9f456SAndroid Build Coastguard Worker    size_t operator()(short __v) const _NOEXCEPT {return static_cast<size_t>(__v);}
1406*58b9f456SAndroid Build Coastguard Worker};
1407*58b9f456SAndroid Build Coastguard Worker
1408*58b9f456SAndroid Build Coastguard Workertemplate <>
1409*58b9f456SAndroid Build Coastguard Workerstruct _LIBCPP_TEMPLATE_VIS hash<unsigned short>
1410*58b9f456SAndroid Build Coastguard Worker    : public unary_function<unsigned short, size_t>
1411*58b9f456SAndroid Build Coastguard Worker{
1412*58b9f456SAndroid Build Coastguard Worker    _LIBCPP_INLINE_VISIBILITY
1413*58b9f456SAndroid Build Coastguard Worker    size_t operator()(unsigned short __v) const _NOEXCEPT {return static_cast<size_t>(__v);}
1414*58b9f456SAndroid Build Coastguard Worker};
1415*58b9f456SAndroid Build Coastguard Worker
1416*58b9f456SAndroid Build Coastguard Workertemplate <>
1417*58b9f456SAndroid Build Coastguard Workerstruct _LIBCPP_TEMPLATE_VIS hash<int>
1418*58b9f456SAndroid Build Coastguard Worker    : public unary_function<int, size_t>
1419*58b9f456SAndroid Build Coastguard Worker{
1420*58b9f456SAndroid Build Coastguard Worker    _LIBCPP_INLINE_VISIBILITY
1421*58b9f456SAndroid Build Coastguard Worker    size_t operator()(int __v) const _NOEXCEPT {return static_cast<size_t>(__v);}
1422*58b9f456SAndroid Build Coastguard Worker};
1423*58b9f456SAndroid Build Coastguard Worker
1424*58b9f456SAndroid Build Coastguard Workertemplate <>
1425*58b9f456SAndroid Build Coastguard Workerstruct _LIBCPP_TEMPLATE_VIS hash<unsigned int>
1426*58b9f456SAndroid Build Coastguard Worker    : public unary_function<unsigned int, size_t>
1427*58b9f456SAndroid Build Coastguard Worker{
1428*58b9f456SAndroid Build Coastguard Worker    _LIBCPP_INLINE_VISIBILITY
1429*58b9f456SAndroid Build Coastguard Worker    size_t operator()(unsigned int __v) const _NOEXCEPT {return static_cast<size_t>(__v);}
1430*58b9f456SAndroid Build Coastguard Worker};
1431*58b9f456SAndroid Build Coastguard Worker
1432*58b9f456SAndroid Build Coastguard Workertemplate <>
1433*58b9f456SAndroid Build Coastguard Workerstruct _LIBCPP_TEMPLATE_VIS hash<long>
1434*58b9f456SAndroid Build Coastguard Worker    : public unary_function<long, size_t>
1435*58b9f456SAndroid Build Coastguard Worker{
1436*58b9f456SAndroid Build Coastguard Worker    _LIBCPP_INLINE_VISIBILITY
1437*58b9f456SAndroid Build Coastguard Worker    size_t operator()(long __v) const _NOEXCEPT {return static_cast<size_t>(__v);}
1438*58b9f456SAndroid Build Coastguard Worker};
1439*58b9f456SAndroid Build Coastguard Worker
1440*58b9f456SAndroid Build Coastguard Workertemplate <>
1441*58b9f456SAndroid Build Coastguard Workerstruct _LIBCPP_TEMPLATE_VIS hash<unsigned long>
1442*58b9f456SAndroid Build Coastguard Worker    : public unary_function<unsigned long, size_t>
1443*58b9f456SAndroid Build Coastguard Worker{
1444*58b9f456SAndroid Build Coastguard Worker    _LIBCPP_INLINE_VISIBILITY
1445*58b9f456SAndroid Build Coastguard Worker    size_t operator()(unsigned long __v) const _NOEXCEPT {return static_cast<size_t>(__v);}
1446*58b9f456SAndroid Build Coastguard Worker};
1447*58b9f456SAndroid Build Coastguard Worker
1448*58b9f456SAndroid Build Coastguard Workertemplate <>
1449*58b9f456SAndroid Build Coastguard Workerstruct _LIBCPP_TEMPLATE_VIS hash<long long>
1450*58b9f456SAndroid Build Coastguard Worker    : public __scalar_hash<long long>
1451*58b9f456SAndroid Build Coastguard Worker{
1452*58b9f456SAndroid Build Coastguard Worker};
1453*58b9f456SAndroid Build Coastguard Worker
1454*58b9f456SAndroid Build Coastguard Workertemplate <>
1455*58b9f456SAndroid Build Coastguard Workerstruct _LIBCPP_TEMPLATE_VIS hash<unsigned long long>
1456*58b9f456SAndroid Build Coastguard Worker    : public __scalar_hash<unsigned long long>
1457*58b9f456SAndroid Build Coastguard Worker{
1458*58b9f456SAndroid Build Coastguard Worker};
1459*58b9f456SAndroid Build Coastguard Worker
1460*58b9f456SAndroid Build Coastguard Worker#ifndef _LIBCPP_HAS_NO_INT128
1461*58b9f456SAndroid Build Coastguard Worker
1462*58b9f456SAndroid Build Coastguard Workertemplate <>
1463*58b9f456SAndroid Build Coastguard Workerstruct _LIBCPP_TEMPLATE_VIS hash<__int128_t>
1464*58b9f456SAndroid Build Coastguard Worker    : public __scalar_hash<__int128_t>
1465*58b9f456SAndroid Build Coastguard Worker{
1466*58b9f456SAndroid Build Coastguard Worker};
1467*58b9f456SAndroid Build Coastguard Worker
1468*58b9f456SAndroid Build Coastguard Workertemplate <>
1469*58b9f456SAndroid Build Coastguard Workerstruct _LIBCPP_TEMPLATE_VIS hash<__uint128_t>
1470*58b9f456SAndroid Build Coastguard Worker    : public __scalar_hash<__uint128_t>
1471*58b9f456SAndroid Build Coastguard Worker{
1472*58b9f456SAndroid Build Coastguard Worker};
1473*58b9f456SAndroid Build Coastguard Worker
1474*58b9f456SAndroid Build Coastguard Worker#endif
1475*58b9f456SAndroid Build Coastguard Worker
1476*58b9f456SAndroid Build Coastguard Workertemplate <>
1477*58b9f456SAndroid Build Coastguard Workerstruct _LIBCPP_TEMPLATE_VIS hash<float>
1478*58b9f456SAndroid Build Coastguard Worker    : public __scalar_hash<float>
1479*58b9f456SAndroid Build Coastguard Worker{
1480*58b9f456SAndroid Build Coastguard Worker    _LIBCPP_INLINE_VISIBILITY
1481*58b9f456SAndroid Build Coastguard Worker    size_t operator()(float __v) const _NOEXCEPT
1482*58b9f456SAndroid Build Coastguard Worker    {
1483*58b9f456SAndroid Build Coastguard Worker        // -0.0 and 0.0 should return same hash
1484*58b9f456SAndroid Build Coastguard Worker       if (__v == 0.0)
1485*58b9f456SAndroid Build Coastguard Worker           return 0;
1486*58b9f456SAndroid Build Coastguard Worker        return __scalar_hash<float>::operator()(__v);
1487*58b9f456SAndroid Build Coastguard Worker    }
1488*58b9f456SAndroid Build Coastguard Worker};
1489*58b9f456SAndroid Build Coastguard Worker
1490*58b9f456SAndroid Build Coastguard Workertemplate <>
1491*58b9f456SAndroid Build Coastguard Workerstruct _LIBCPP_TEMPLATE_VIS hash<double>
1492*58b9f456SAndroid Build Coastguard Worker    : public __scalar_hash<double>
1493*58b9f456SAndroid Build Coastguard Worker{
1494*58b9f456SAndroid Build Coastguard Worker    _LIBCPP_INLINE_VISIBILITY
1495*58b9f456SAndroid Build Coastguard Worker    size_t operator()(double __v) const _NOEXCEPT
1496*58b9f456SAndroid Build Coastguard Worker    {
1497*58b9f456SAndroid Build Coastguard Worker        // -0.0 and 0.0 should return same hash
1498*58b9f456SAndroid Build Coastguard Worker       if (__v == 0.0)
1499*58b9f456SAndroid Build Coastguard Worker           return 0;
1500*58b9f456SAndroid Build Coastguard Worker        return __scalar_hash<double>::operator()(__v);
1501*58b9f456SAndroid Build Coastguard Worker    }
1502*58b9f456SAndroid Build Coastguard Worker};
1503*58b9f456SAndroid Build Coastguard Worker
1504*58b9f456SAndroid Build Coastguard Workertemplate <>
1505*58b9f456SAndroid Build Coastguard Workerstruct _LIBCPP_TEMPLATE_VIS hash<long double>
1506*58b9f456SAndroid Build Coastguard Worker    : public __scalar_hash<long double>
1507*58b9f456SAndroid Build Coastguard Worker{
1508*58b9f456SAndroid Build Coastguard Worker    _LIBCPP_INLINE_VISIBILITY
1509*58b9f456SAndroid Build Coastguard Worker    size_t operator()(long double __v) const _NOEXCEPT
1510*58b9f456SAndroid Build Coastguard Worker    {
1511*58b9f456SAndroid Build Coastguard Worker        // -0.0 and 0.0 should return same hash
1512*58b9f456SAndroid Build Coastguard Worker        if (__v == 0.0)
1513*58b9f456SAndroid Build Coastguard Worker            return 0;
1514*58b9f456SAndroid Build Coastguard Worker#if defined(__i386__)
1515*58b9f456SAndroid Build Coastguard Worker        // Zero out padding bits
1516*58b9f456SAndroid Build Coastguard Worker        union
1517*58b9f456SAndroid Build Coastguard Worker        {
1518*58b9f456SAndroid Build Coastguard Worker            long double __t;
1519*58b9f456SAndroid Build Coastguard Worker            struct
1520*58b9f456SAndroid Build Coastguard Worker            {
1521*58b9f456SAndroid Build Coastguard Worker                size_t __a;
1522*58b9f456SAndroid Build Coastguard Worker                size_t __b;
1523*58b9f456SAndroid Build Coastguard Worker                size_t __c;
1524*58b9f456SAndroid Build Coastguard Worker                size_t __d;
1525*58b9f456SAndroid Build Coastguard Worker            } __s;
1526*58b9f456SAndroid Build Coastguard Worker        } __u;
1527*58b9f456SAndroid Build Coastguard Worker        __u.__s.__a = 0;
1528*58b9f456SAndroid Build Coastguard Worker        __u.__s.__b = 0;
1529*58b9f456SAndroid Build Coastguard Worker        __u.__s.__c = 0;
1530*58b9f456SAndroid Build Coastguard Worker        __u.__s.__d = 0;
1531*58b9f456SAndroid Build Coastguard Worker        __u.__t = __v;
1532*58b9f456SAndroid Build Coastguard Worker        return __u.__s.__a ^ __u.__s.__b ^ __u.__s.__c ^ __u.__s.__d;
1533*58b9f456SAndroid Build Coastguard Worker#elif defined(__x86_64__)
1534*58b9f456SAndroid Build Coastguard Worker        // Zero out padding bits
1535*58b9f456SAndroid Build Coastguard Worker        union
1536*58b9f456SAndroid Build Coastguard Worker        {
1537*58b9f456SAndroid Build Coastguard Worker            long double __t;
1538*58b9f456SAndroid Build Coastguard Worker            struct
1539*58b9f456SAndroid Build Coastguard Worker            {
1540*58b9f456SAndroid Build Coastguard Worker                size_t __a;
1541*58b9f456SAndroid Build Coastguard Worker                size_t __b;
1542*58b9f456SAndroid Build Coastguard Worker            } __s;
1543*58b9f456SAndroid Build Coastguard Worker        } __u;
1544*58b9f456SAndroid Build Coastguard Worker        __u.__s.__a = 0;
1545*58b9f456SAndroid Build Coastguard Worker        __u.__s.__b = 0;
1546*58b9f456SAndroid Build Coastguard Worker        __u.__t = __v;
1547*58b9f456SAndroid Build Coastguard Worker        return __u.__s.__a ^ __u.__s.__b;
1548*58b9f456SAndroid Build Coastguard Worker#else
1549*58b9f456SAndroid Build Coastguard Worker        return __scalar_hash<long double>::operator()(__v);
1550*58b9f456SAndroid Build Coastguard Worker#endif
1551*58b9f456SAndroid Build Coastguard Worker    }
1552*58b9f456SAndroid Build Coastguard Worker};
1553*58b9f456SAndroid Build Coastguard Worker
1554*58b9f456SAndroid Build Coastguard Worker#if _LIBCPP_STD_VER > 11
1555*58b9f456SAndroid Build Coastguard Worker
1556*58b9f456SAndroid Build Coastguard Workertemplate <class _Tp, bool = is_enum<_Tp>::value>
1557*58b9f456SAndroid Build Coastguard Workerstruct _LIBCPP_TEMPLATE_VIS __enum_hash
1558*58b9f456SAndroid Build Coastguard Worker    : public unary_function<_Tp, size_t>
1559*58b9f456SAndroid Build Coastguard Worker{
1560*58b9f456SAndroid Build Coastguard Worker    _LIBCPP_INLINE_VISIBILITY
1561*58b9f456SAndroid Build Coastguard Worker    size_t operator()(_Tp __v) const _NOEXCEPT
1562*58b9f456SAndroid Build Coastguard Worker    {
1563*58b9f456SAndroid Build Coastguard Worker        typedef typename underlying_type<_Tp>::type type;
1564*58b9f456SAndroid Build Coastguard Worker        return hash<type>{}(static_cast<type>(__v));
1565*58b9f456SAndroid Build Coastguard Worker    }
1566*58b9f456SAndroid Build Coastguard Worker};
1567*58b9f456SAndroid Build Coastguard Workertemplate <class _Tp>
1568*58b9f456SAndroid Build Coastguard Workerstruct _LIBCPP_TEMPLATE_VIS __enum_hash<_Tp, false> {
1569*58b9f456SAndroid Build Coastguard Worker    __enum_hash() = delete;
1570*58b9f456SAndroid Build Coastguard Worker    __enum_hash(__enum_hash const&) = delete;
1571*58b9f456SAndroid Build Coastguard Worker    __enum_hash& operator=(__enum_hash const&) = delete;
1572*58b9f456SAndroid Build Coastguard Worker};
1573*58b9f456SAndroid Build Coastguard Worker
1574*58b9f456SAndroid Build Coastguard Workertemplate <class _Tp>
1575*58b9f456SAndroid Build Coastguard Workerstruct _LIBCPP_TEMPLATE_VIS hash : public __enum_hash<_Tp>
1576*58b9f456SAndroid Build Coastguard Worker{
1577*58b9f456SAndroid Build Coastguard Worker};
1578*58b9f456SAndroid Build Coastguard Worker#endif
1579*58b9f456SAndroid Build Coastguard Worker
1580*58b9f456SAndroid Build Coastguard Worker#if _LIBCPP_STD_VER > 14
1581*58b9f456SAndroid Build Coastguard Worker
1582*58b9f456SAndroid Build Coastguard Workertemplate <>
1583*58b9f456SAndroid Build Coastguard Workerstruct _LIBCPP_TEMPLATE_VIS hash<nullptr_t>
1584*58b9f456SAndroid Build Coastguard Worker  : public unary_function<nullptr_t, size_t>
1585*58b9f456SAndroid Build Coastguard Worker{
1586*58b9f456SAndroid Build Coastguard Worker  _LIBCPP_INLINE_VISIBILITY
1587*58b9f456SAndroid Build Coastguard Worker  size_t operator()(nullptr_t) const _NOEXCEPT {
1588*58b9f456SAndroid Build Coastguard Worker    return 662607004ull;
1589*58b9f456SAndroid Build Coastguard Worker  }
1590*58b9f456SAndroid Build Coastguard Worker};
1591*58b9f456SAndroid Build Coastguard Worker#endif
1592*58b9f456SAndroid Build Coastguard Worker
1593*58b9f456SAndroid Build Coastguard Worker#ifndef _LIBCPP_CXX03_LANG
1594*58b9f456SAndroid Build Coastguard Workertemplate <class _Key, class _Hash>
1595*58b9f456SAndroid Build Coastguard Workerusing __check_hash_requirements = integral_constant<bool,
1596*58b9f456SAndroid Build Coastguard Worker    is_copy_constructible<_Hash>::value &&
1597*58b9f456SAndroid Build Coastguard Worker    is_move_constructible<_Hash>::value &&
1598*58b9f456SAndroid Build Coastguard Worker    __invokable_r<size_t, _Hash, _Key const&>::value
1599*58b9f456SAndroid Build Coastguard Worker>;
1600*58b9f456SAndroid Build Coastguard Worker
1601*58b9f456SAndroid Build Coastguard Workertemplate <class _Key, class _Hash = std::hash<_Key> >
1602*58b9f456SAndroid Build Coastguard Workerusing __has_enabled_hash = integral_constant<bool,
1603*58b9f456SAndroid Build Coastguard Worker    __check_hash_requirements<_Key, _Hash>::value &&
1604*58b9f456SAndroid Build Coastguard Worker    is_default_constructible<_Hash>::value
1605*58b9f456SAndroid Build Coastguard Worker>;
1606*58b9f456SAndroid Build Coastguard Worker
1607*58b9f456SAndroid Build Coastguard Worker#if _LIBCPP_STD_VER > 14
1608*58b9f456SAndroid Build Coastguard Workertemplate <class _Type, class>
1609*58b9f456SAndroid Build Coastguard Workerusing __enable_hash_helper_imp = _Type;
1610*58b9f456SAndroid Build Coastguard Worker
1611*58b9f456SAndroid Build Coastguard Workertemplate <class _Type, class ..._Keys>
1612*58b9f456SAndroid Build Coastguard Workerusing __enable_hash_helper = __enable_hash_helper_imp<_Type,
1613*58b9f456SAndroid Build Coastguard Worker  typename enable_if<__all<__has_enabled_hash<_Keys>::value...>::value>::type
1614*58b9f456SAndroid Build Coastguard Worker>;
1615*58b9f456SAndroid Build Coastguard Worker#else
1616*58b9f456SAndroid Build Coastguard Workertemplate <class _Type, class ...>
1617*58b9f456SAndroid Build Coastguard Workerusing __enable_hash_helper = _Type;
1618*58b9f456SAndroid Build Coastguard Worker#endif
1619*58b9f456SAndroid Build Coastguard Worker
1620*58b9f456SAndroid Build Coastguard Worker#endif // !_LIBCPP_CXX03_LANG
1621*58b9f456SAndroid Build Coastguard Worker
1622*58b9f456SAndroid Build Coastguard Worker_LIBCPP_END_NAMESPACE_STD
1623*58b9f456SAndroid Build Coastguard Worker
1624*58b9f456SAndroid Build Coastguard Worker#endif  // _LIBCPP_UTILITY
1625