xref: /aosp_15_r20/external/libcxx/include/limits (revision 58b9f456b02922dfdb1fad8a988d5fd8765ecb80)
1*58b9f456SAndroid Build Coastguard Worker// -*- C++ -*-
2*58b9f456SAndroid Build Coastguard Worker//===---------------------------- limits ----------------------------------===//
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_LIMITS
12*58b9f456SAndroid Build Coastguard Worker#define _LIBCPP_LIMITS
13*58b9f456SAndroid Build Coastguard Worker
14*58b9f456SAndroid Build Coastguard Worker/*
15*58b9f456SAndroid Build Coastguard Worker    limits synopsis
16*58b9f456SAndroid Build Coastguard Worker
17*58b9f456SAndroid Build Coastguard Workernamespace std
18*58b9f456SAndroid Build Coastguard Worker{
19*58b9f456SAndroid Build Coastguard Worker
20*58b9f456SAndroid Build Coastguard Workertemplate<class T>
21*58b9f456SAndroid Build Coastguard Workerclass numeric_limits
22*58b9f456SAndroid Build Coastguard Worker{
23*58b9f456SAndroid Build Coastguard Workerpublic:
24*58b9f456SAndroid Build Coastguard Worker    static constexpr bool is_specialized = false;
25*58b9f456SAndroid Build Coastguard Worker    static constexpr T min() noexcept;
26*58b9f456SAndroid Build Coastguard Worker    static constexpr T max() noexcept;
27*58b9f456SAndroid Build Coastguard Worker    static constexpr T lowest() noexcept;
28*58b9f456SAndroid Build Coastguard Worker
29*58b9f456SAndroid Build Coastguard Worker    static constexpr int  digits = 0;
30*58b9f456SAndroid Build Coastguard Worker    static constexpr int  digits10 = 0;
31*58b9f456SAndroid Build Coastguard Worker    static constexpr int  max_digits10 = 0;
32*58b9f456SAndroid Build Coastguard Worker    static constexpr bool is_signed = false;
33*58b9f456SAndroid Build Coastguard Worker    static constexpr bool is_integer = false;
34*58b9f456SAndroid Build Coastguard Worker    static constexpr bool is_exact = false;
35*58b9f456SAndroid Build Coastguard Worker    static constexpr int  radix = 0;
36*58b9f456SAndroid Build Coastguard Worker    static constexpr T epsilon() noexcept;
37*58b9f456SAndroid Build Coastguard Worker    static constexpr T round_error() noexcept;
38*58b9f456SAndroid Build Coastguard Worker
39*58b9f456SAndroid Build Coastguard Worker    static constexpr int  min_exponent = 0;
40*58b9f456SAndroid Build Coastguard Worker    static constexpr int  min_exponent10 = 0;
41*58b9f456SAndroid Build Coastguard Worker    static constexpr int  max_exponent = 0;
42*58b9f456SAndroid Build Coastguard Worker    static constexpr int  max_exponent10 = 0;
43*58b9f456SAndroid Build Coastguard Worker
44*58b9f456SAndroid Build Coastguard Worker    static constexpr bool has_infinity = false;
45*58b9f456SAndroid Build Coastguard Worker    static constexpr bool has_quiet_NaN = false;
46*58b9f456SAndroid Build Coastguard Worker    static constexpr bool has_signaling_NaN = false;
47*58b9f456SAndroid Build Coastguard Worker    static constexpr float_denorm_style has_denorm = denorm_absent;
48*58b9f456SAndroid Build Coastguard Worker    static constexpr bool has_denorm_loss = false;
49*58b9f456SAndroid Build Coastguard Worker    static constexpr T infinity() noexcept;
50*58b9f456SAndroid Build Coastguard Worker    static constexpr T quiet_NaN() noexcept;
51*58b9f456SAndroid Build Coastguard Worker    static constexpr T signaling_NaN() noexcept;
52*58b9f456SAndroid Build Coastguard Worker    static constexpr T denorm_min() noexcept;
53*58b9f456SAndroid Build Coastguard Worker
54*58b9f456SAndroid Build Coastguard Worker    static constexpr bool is_iec559 = false;
55*58b9f456SAndroid Build Coastguard Worker    static constexpr bool is_bounded = false;
56*58b9f456SAndroid Build Coastguard Worker    static constexpr bool is_modulo = false;
57*58b9f456SAndroid Build Coastguard Worker
58*58b9f456SAndroid Build Coastguard Worker    static constexpr bool traps = false;
59*58b9f456SAndroid Build Coastguard Worker    static constexpr bool tinyness_before = false;
60*58b9f456SAndroid Build Coastguard Worker    static constexpr float_round_style round_style = round_toward_zero;
61*58b9f456SAndroid Build Coastguard Worker};
62*58b9f456SAndroid Build Coastguard Worker
63*58b9f456SAndroid Build Coastguard Workerenum float_round_style
64*58b9f456SAndroid Build Coastguard Worker{
65*58b9f456SAndroid Build Coastguard Worker    round_indeterminate       = -1,
66*58b9f456SAndroid Build Coastguard Worker    round_toward_zero         =  0,
67*58b9f456SAndroid Build Coastguard Worker    round_to_nearest          =  1,
68*58b9f456SAndroid Build Coastguard Worker    round_toward_infinity     =  2,
69*58b9f456SAndroid Build Coastguard Worker    round_toward_neg_infinity =  3
70*58b9f456SAndroid Build Coastguard Worker};
71*58b9f456SAndroid Build Coastguard Worker
72*58b9f456SAndroid Build Coastguard Workerenum float_denorm_style
73*58b9f456SAndroid Build Coastguard Worker{
74*58b9f456SAndroid Build Coastguard Worker    denorm_indeterminate = -1,
75*58b9f456SAndroid Build Coastguard Worker    denorm_absent = 0,
76*58b9f456SAndroid Build Coastguard Worker    denorm_present = 1
77*58b9f456SAndroid Build Coastguard Worker};
78*58b9f456SAndroid Build Coastguard Worker
79*58b9f456SAndroid Build Coastguard Workertemplate<> class numeric_limits<cv bool>;
80*58b9f456SAndroid Build Coastguard Worker
81*58b9f456SAndroid Build Coastguard Workertemplate<> class numeric_limits<cv char>;
82*58b9f456SAndroid Build Coastguard Workertemplate<> class numeric_limits<cv signed char>;
83*58b9f456SAndroid Build Coastguard Workertemplate<> class numeric_limits<cv unsigned char>;
84*58b9f456SAndroid Build Coastguard Workertemplate<> class numeric_limits<cv wchar_t>;
85*58b9f456SAndroid Build Coastguard Workertemplate<> class numeric_limits<cv char8_t>; // C++20
86*58b9f456SAndroid Build Coastguard Workertemplate<> class numeric_limits<cv char16_t>;
87*58b9f456SAndroid Build Coastguard Workertemplate<> class numeric_limits<cv char32_t>;
88*58b9f456SAndroid Build Coastguard Worker
89*58b9f456SAndroid Build Coastguard Workertemplate<> class numeric_limits<cv short>;
90*58b9f456SAndroid Build Coastguard Workertemplate<> class numeric_limits<cv int>;
91*58b9f456SAndroid Build Coastguard Workertemplate<> class numeric_limits<cv long>;
92*58b9f456SAndroid Build Coastguard Workertemplate<> class numeric_limits<cv long long>;
93*58b9f456SAndroid Build Coastguard Workertemplate<> class numeric_limits<cv unsigned short>;
94*58b9f456SAndroid Build Coastguard Workertemplate<> class numeric_limits<cv unsigned int>;
95*58b9f456SAndroid Build Coastguard Workertemplate<> class numeric_limits<cv unsigned long>;
96*58b9f456SAndroid Build Coastguard Workertemplate<> class numeric_limits<cv unsigned long long>;
97*58b9f456SAndroid Build Coastguard Worker
98*58b9f456SAndroid Build Coastguard Workertemplate<> class numeric_limits<cv float>;
99*58b9f456SAndroid Build Coastguard Workertemplate<> class numeric_limits<cv double>;
100*58b9f456SAndroid Build Coastguard Workertemplate<> class numeric_limits<cv long double>;
101*58b9f456SAndroid Build Coastguard Worker
102*58b9f456SAndroid Build Coastguard Worker}  // std
103*58b9f456SAndroid Build Coastguard Worker
104*58b9f456SAndroid Build Coastguard Worker*/
105*58b9f456SAndroid Build Coastguard Worker#include <__config>
106*58b9f456SAndroid Build Coastguard Worker#include <type_traits>
107*58b9f456SAndroid Build Coastguard Worker
108*58b9f456SAndroid Build Coastguard Worker#if defined(_LIBCPP_COMPILER_MSVC)
109*58b9f456SAndroid Build Coastguard Worker#include "support/win32/limits_msvc_win32.h"
110*58b9f456SAndroid Build Coastguard Worker#endif // _LIBCPP_MSVCRT
111*58b9f456SAndroid Build Coastguard Worker
112*58b9f456SAndroid Build Coastguard Worker#if defined(__IBMCPP__)
113*58b9f456SAndroid Build Coastguard Worker#include "support/ibm/limits.h"
114*58b9f456SAndroid Build Coastguard Worker#endif // __IBMCPP__
115*58b9f456SAndroid Build Coastguard Worker
116*58b9f456SAndroid Build Coastguard Worker#if !defined(_LIBCPP_HAS_NO_PRAGMA_SYSTEM_HEADER)
117*58b9f456SAndroid Build Coastguard Worker#pragma GCC system_header
118*58b9f456SAndroid Build Coastguard Worker#endif
119*58b9f456SAndroid Build Coastguard Worker
120*58b9f456SAndroid Build Coastguard Worker_LIBCPP_PUSH_MACROS
121*58b9f456SAndroid Build Coastguard Worker#include <__undef_macros>
122*58b9f456SAndroid Build Coastguard Worker#include <version>
123*58b9f456SAndroid Build Coastguard Worker
124*58b9f456SAndroid Build Coastguard Worker
125*58b9f456SAndroid Build Coastguard Worker_LIBCPP_BEGIN_NAMESPACE_STD
126*58b9f456SAndroid Build Coastguard Worker
127*58b9f456SAndroid Build Coastguard Workerenum float_round_style
128*58b9f456SAndroid Build Coastguard Worker{
129*58b9f456SAndroid Build Coastguard Worker    round_indeterminate       = -1,
130*58b9f456SAndroid Build Coastguard Worker    round_toward_zero         =  0,
131*58b9f456SAndroid Build Coastguard Worker    round_to_nearest          =  1,
132*58b9f456SAndroid Build Coastguard Worker    round_toward_infinity     =  2,
133*58b9f456SAndroid Build Coastguard Worker    round_toward_neg_infinity =  3
134*58b9f456SAndroid Build Coastguard Worker};
135*58b9f456SAndroid Build Coastguard Worker
136*58b9f456SAndroid Build Coastguard Workerenum float_denorm_style
137*58b9f456SAndroid Build Coastguard Worker{
138*58b9f456SAndroid Build Coastguard Worker    denorm_indeterminate = -1,
139*58b9f456SAndroid Build Coastguard Worker    denorm_absent = 0,
140*58b9f456SAndroid Build Coastguard Worker    denorm_present = 1
141*58b9f456SAndroid Build Coastguard Worker};
142*58b9f456SAndroid Build Coastguard Worker
143*58b9f456SAndroid Build Coastguard Workertemplate <class _Tp, bool = is_arithmetic<_Tp>::value>
144*58b9f456SAndroid Build Coastguard Workerclass __libcpp_numeric_limits
145*58b9f456SAndroid Build Coastguard Worker{
146*58b9f456SAndroid Build Coastguard Workerprotected:
147*58b9f456SAndroid Build Coastguard Worker    typedef _Tp type;
148*58b9f456SAndroid Build Coastguard Worker
149*58b9f456SAndroid Build Coastguard Worker    static _LIBCPP_CONSTEXPR const  bool is_specialized = false;
150*58b9f456SAndroid Build Coastguard Worker    _LIBCPP_INLINE_VISIBILITY static _LIBCPP_CONSTEXPR type min() _NOEXCEPT {return type();}
151*58b9f456SAndroid Build Coastguard Worker    _LIBCPP_INLINE_VISIBILITY static _LIBCPP_CONSTEXPR type max() _NOEXCEPT {return type();}
152*58b9f456SAndroid Build Coastguard Worker    _LIBCPP_INLINE_VISIBILITY static _LIBCPP_CONSTEXPR type lowest() _NOEXCEPT {return type();}
153*58b9f456SAndroid Build Coastguard Worker
154*58b9f456SAndroid Build Coastguard Worker    static _LIBCPP_CONSTEXPR const int  digits = 0;
155*58b9f456SAndroid Build Coastguard Worker    static _LIBCPP_CONSTEXPR const int  digits10 = 0;
156*58b9f456SAndroid Build Coastguard Worker    static _LIBCPP_CONSTEXPR const int  max_digits10 = 0;
157*58b9f456SAndroid Build Coastguard Worker    static _LIBCPP_CONSTEXPR const bool is_signed = false;
158*58b9f456SAndroid Build Coastguard Worker    static _LIBCPP_CONSTEXPR const bool is_integer = false;
159*58b9f456SAndroid Build Coastguard Worker    static _LIBCPP_CONSTEXPR const bool is_exact = false;
160*58b9f456SAndroid Build Coastguard Worker    static _LIBCPP_CONSTEXPR const int  radix = 0;
161*58b9f456SAndroid Build Coastguard Worker    _LIBCPP_INLINE_VISIBILITY static _LIBCPP_CONSTEXPR type epsilon() _NOEXCEPT {return type();}
162*58b9f456SAndroid Build Coastguard Worker    _LIBCPP_INLINE_VISIBILITY static _LIBCPP_CONSTEXPR type round_error() _NOEXCEPT {return type();}
163*58b9f456SAndroid Build Coastguard Worker
164*58b9f456SAndroid Build Coastguard Worker    static _LIBCPP_CONSTEXPR const int  min_exponent = 0;
165*58b9f456SAndroid Build Coastguard Worker    static _LIBCPP_CONSTEXPR const int  min_exponent10 = 0;
166*58b9f456SAndroid Build Coastguard Worker    static _LIBCPP_CONSTEXPR const int  max_exponent = 0;
167*58b9f456SAndroid Build Coastguard Worker    static _LIBCPP_CONSTEXPR const int  max_exponent10 = 0;
168*58b9f456SAndroid Build Coastguard Worker
169*58b9f456SAndroid Build Coastguard Worker    static _LIBCPP_CONSTEXPR const bool has_infinity = false;
170*58b9f456SAndroid Build Coastguard Worker    static _LIBCPP_CONSTEXPR const bool has_quiet_NaN = false;
171*58b9f456SAndroid Build Coastguard Worker    static _LIBCPP_CONSTEXPR const bool has_signaling_NaN = false;
172*58b9f456SAndroid Build Coastguard Worker    static _LIBCPP_CONSTEXPR const float_denorm_style has_denorm = denorm_absent;
173*58b9f456SAndroid Build Coastguard Worker    static _LIBCPP_CONSTEXPR const bool has_denorm_loss = false;
174*58b9f456SAndroid Build Coastguard Worker    _LIBCPP_INLINE_VISIBILITY static _LIBCPP_CONSTEXPR type infinity() _NOEXCEPT {return type();}
175*58b9f456SAndroid Build Coastguard Worker    _LIBCPP_INLINE_VISIBILITY static _LIBCPP_CONSTEXPR type quiet_NaN() _NOEXCEPT {return type();}
176*58b9f456SAndroid Build Coastguard Worker    _LIBCPP_INLINE_VISIBILITY static _LIBCPP_CONSTEXPR type signaling_NaN() _NOEXCEPT {return type();}
177*58b9f456SAndroid Build Coastguard Worker    _LIBCPP_INLINE_VISIBILITY static _LIBCPP_CONSTEXPR type denorm_min() _NOEXCEPT {return type();}
178*58b9f456SAndroid Build Coastguard Worker
179*58b9f456SAndroid Build Coastguard Worker    static _LIBCPP_CONSTEXPR const bool is_iec559 = false;
180*58b9f456SAndroid Build Coastguard Worker    static _LIBCPP_CONSTEXPR const bool is_bounded = false;
181*58b9f456SAndroid Build Coastguard Worker    static _LIBCPP_CONSTEXPR const bool is_modulo = false;
182*58b9f456SAndroid Build Coastguard Worker
183*58b9f456SAndroid Build Coastguard Worker    static _LIBCPP_CONSTEXPR const bool traps = false;
184*58b9f456SAndroid Build Coastguard Worker    static _LIBCPP_CONSTEXPR const bool tinyness_before = false;
185*58b9f456SAndroid Build Coastguard Worker    static _LIBCPP_CONSTEXPR const float_round_style round_style = round_toward_zero;
186*58b9f456SAndroid Build Coastguard Worker};
187*58b9f456SAndroid Build Coastguard Worker
188*58b9f456SAndroid Build Coastguard Workertemplate <class _Tp, int __digits, bool _IsSigned>
189*58b9f456SAndroid Build Coastguard Workerstruct __libcpp_compute_min
190*58b9f456SAndroid Build Coastguard Worker{
191*58b9f456SAndroid Build Coastguard Worker    static _LIBCPP_CONSTEXPR const _Tp value = _Tp(_Tp(1) << __digits);
192*58b9f456SAndroid Build Coastguard Worker};
193*58b9f456SAndroid Build Coastguard Worker
194*58b9f456SAndroid Build Coastguard Workertemplate <class _Tp, int __digits>
195*58b9f456SAndroid Build Coastguard Workerstruct __libcpp_compute_min<_Tp, __digits, false>
196*58b9f456SAndroid Build Coastguard Worker{
197*58b9f456SAndroid Build Coastguard Worker    static _LIBCPP_CONSTEXPR const _Tp value = _Tp(0);
198*58b9f456SAndroid Build Coastguard Worker};
199*58b9f456SAndroid Build Coastguard Worker
200*58b9f456SAndroid Build Coastguard Workertemplate <class _Tp>
201*58b9f456SAndroid Build Coastguard Workerclass __libcpp_numeric_limits<_Tp, true>
202*58b9f456SAndroid Build Coastguard Worker{
203*58b9f456SAndroid Build Coastguard Workerprotected:
204*58b9f456SAndroid Build Coastguard Worker    typedef _Tp type;
205*58b9f456SAndroid Build Coastguard Worker
206*58b9f456SAndroid Build Coastguard Worker    static _LIBCPP_CONSTEXPR const bool is_specialized = true;
207*58b9f456SAndroid Build Coastguard Worker
208*58b9f456SAndroid Build Coastguard Worker    static _LIBCPP_CONSTEXPR const bool is_signed = type(-1) < type(0);
209*58b9f456SAndroid Build Coastguard Worker    static _LIBCPP_CONSTEXPR const int  digits = static_cast<int>(sizeof(type) * __CHAR_BIT__ - is_signed);
210*58b9f456SAndroid Build Coastguard Worker    static _LIBCPP_CONSTEXPR const int  digits10 = digits * 3 / 10;
211*58b9f456SAndroid Build Coastguard Worker    static _LIBCPP_CONSTEXPR const int  max_digits10 = 0;
212*58b9f456SAndroid Build Coastguard Worker    static _LIBCPP_CONSTEXPR const type __min = __libcpp_compute_min<type, digits, is_signed>::value;
213*58b9f456SAndroid Build Coastguard Worker    static _LIBCPP_CONSTEXPR const type __max = is_signed ? type(type(~0) ^ __min) : type(~0);
214*58b9f456SAndroid Build Coastguard Worker    _LIBCPP_INLINE_VISIBILITY static _LIBCPP_CONSTEXPR type min() _NOEXCEPT {return __min;}
215*58b9f456SAndroid Build Coastguard Worker    _LIBCPP_INLINE_VISIBILITY static _LIBCPP_CONSTEXPR type max() _NOEXCEPT {return __max;}
216*58b9f456SAndroid Build Coastguard Worker    _LIBCPP_INLINE_VISIBILITY static _LIBCPP_CONSTEXPR type lowest() _NOEXCEPT {return min();}
217*58b9f456SAndroid Build Coastguard Worker
218*58b9f456SAndroid Build Coastguard Worker    static _LIBCPP_CONSTEXPR const bool is_integer = true;
219*58b9f456SAndroid Build Coastguard Worker    static _LIBCPP_CONSTEXPR const bool is_exact = true;
220*58b9f456SAndroid Build Coastguard Worker    static _LIBCPP_CONSTEXPR const int  radix = 2;
221*58b9f456SAndroid Build Coastguard Worker    _LIBCPP_INLINE_VISIBILITY static _LIBCPP_CONSTEXPR type epsilon() _NOEXCEPT {return type(0);}
222*58b9f456SAndroid Build Coastguard Worker    _LIBCPP_INLINE_VISIBILITY static _LIBCPP_CONSTEXPR type round_error() _NOEXCEPT {return type(0);}
223*58b9f456SAndroid Build Coastguard Worker
224*58b9f456SAndroid Build Coastguard Worker    static _LIBCPP_CONSTEXPR const int  min_exponent = 0;
225*58b9f456SAndroid Build Coastguard Worker    static _LIBCPP_CONSTEXPR const int  min_exponent10 = 0;
226*58b9f456SAndroid Build Coastguard Worker    static _LIBCPP_CONSTEXPR const int  max_exponent = 0;
227*58b9f456SAndroid Build Coastguard Worker    static _LIBCPP_CONSTEXPR const int  max_exponent10 = 0;
228*58b9f456SAndroid Build Coastguard Worker
229*58b9f456SAndroid Build Coastguard Worker    static _LIBCPP_CONSTEXPR const bool has_infinity = false;
230*58b9f456SAndroid Build Coastguard Worker    static _LIBCPP_CONSTEXPR const bool has_quiet_NaN = false;
231*58b9f456SAndroid Build Coastguard Worker    static _LIBCPP_CONSTEXPR const bool has_signaling_NaN = false;
232*58b9f456SAndroid Build Coastguard Worker    static _LIBCPP_CONSTEXPR const float_denorm_style has_denorm = denorm_absent;
233*58b9f456SAndroid Build Coastguard Worker    static _LIBCPP_CONSTEXPR const bool has_denorm_loss = false;
234*58b9f456SAndroid Build Coastguard Worker    _LIBCPP_INLINE_VISIBILITY static _LIBCPP_CONSTEXPR type infinity() _NOEXCEPT {return type(0);}
235*58b9f456SAndroid Build Coastguard Worker    _LIBCPP_INLINE_VISIBILITY static _LIBCPP_CONSTEXPR type quiet_NaN() _NOEXCEPT {return type(0);}
236*58b9f456SAndroid Build Coastguard Worker    _LIBCPP_INLINE_VISIBILITY static _LIBCPP_CONSTEXPR type signaling_NaN() _NOEXCEPT {return type(0);}
237*58b9f456SAndroid Build Coastguard Worker    _LIBCPP_INLINE_VISIBILITY static _LIBCPP_CONSTEXPR type denorm_min() _NOEXCEPT {return type(0);}
238*58b9f456SAndroid Build Coastguard Worker
239*58b9f456SAndroid Build Coastguard Worker    static _LIBCPP_CONSTEXPR const bool is_iec559 = false;
240*58b9f456SAndroid Build Coastguard Worker    static _LIBCPP_CONSTEXPR const bool is_bounded = true;
241*58b9f456SAndroid Build Coastguard Worker    static _LIBCPP_CONSTEXPR const bool is_modulo = !_VSTD::is_signed<_Tp>::value;
242*58b9f456SAndroid Build Coastguard Worker
243*58b9f456SAndroid Build Coastguard Worker#if defined(__i386__) || defined(__x86_64__) || defined(__pnacl__) || \
244*58b9f456SAndroid Build Coastguard Worker    defined(__wasm__)
245*58b9f456SAndroid Build Coastguard Worker    static _LIBCPP_CONSTEXPR const bool traps = true;
246*58b9f456SAndroid Build Coastguard Worker#else
247*58b9f456SAndroid Build Coastguard Worker    static _LIBCPP_CONSTEXPR const bool traps = false;
248*58b9f456SAndroid Build Coastguard Worker#endif
249*58b9f456SAndroid Build Coastguard Worker    static _LIBCPP_CONSTEXPR const bool tinyness_before = false;
250*58b9f456SAndroid Build Coastguard Worker    static _LIBCPP_CONSTEXPR const float_round_style round_style = round_toward_zero;
251*58b9f456SAndroid Build Coastguard Worker};
252*58b9f456SAndroid Build Coastguard Worker
253*58b9f456SAndroid Build Coastguard Workertemplate <>
254*58b9f456SAndroid Build Coastguard Workerclass __libcpp_numeric_limits<bool, true>
255*58b9f456SAndroid Build Coastguard Worker{
256*58b9f456SAndroid Build Coastguard Workerprotected:
257*58b9f456SAndroid Build Coastguard Worker    typedef bool type;
258*58b9f456SAndroid Build Coastguard Worker
259*58b9f456SAndroid Build Coastguard Worker    static _LIBCPP_CONSTEXPR const bool is_specialized = true;
260*58b9f456SAndroid Build Coastguard Worker
261*58b9f456SAndroid Build Coastguard Worker    static _LIBCPP_CONSTEXPR const bool is_signed = false;
262*58b9f456SAndroid Build Coastguard Worker    static _LIBCPP_CONSTEXPR const int  digits = 1;
263*58b9f456SAndroid Build Coastguard Worker    static _LIBCPP_CONSTEXPR const int  digits10 = 0;
264*58b9f456SAndroid Build Coastguard Worker    static _LIBCPP_CONSTEXPR const int  max_digits10 = 0;
265*58b9f456SAndroid Build Coastguard Worker    static _LIBCPP_CONSTEXPR const type __min = false;
266*58b9f456SAndroid Build Coastguard Worker    static _LIBCPP_CONSTEXPR const type __max = true;
267*58b9f456SAndroid Build Coastguard Worker    _LIBCPP_INLINE_VISIBILITY static _LIBCPP_CONSTEXPR type min() _NOEXCEPT {return __min;}
268*58b9f456SAndroid Build Coastguard Worker    _LIBCPP_INLINE_VISIBILITY static _LIBCPP_CONSTEXPR type max() _NOEXCEPT {return __max;}
269*58b9f456SAndroid Build Coastguard Worker    _LIBCPP_INLINE_VISIBILITY static _LIBCPP_CONSTEXPR type lowest() _NOEXCEPT {return min();}
270*58b9f456SAndroid Build Coastguard Worker
271*58b9f456SAndroid Build Coastguard Worker    static _LIBCPP_CONSTEXPR const bool is_integer = true;
272*58b9f456SAndroid Build Coastguard Worker    static _LIBCPP_CONSTEXPR const bool is_exact = true;
273*58b9f456SAndroid Build Coastguard Worker    static _LIBCPP_CONSTEXPR const int  radix = 2;
274*58b9f456SAndroid Build Coastguard Worker    _LIBCPP_INLINE_VISIBILITY static _LIBCPP_CONSTEXPR type epsilon() _NOEXCEPT {return type(0);}
275*58b9f456SAndroid Build Coastguard Worker    _LIBCPP_INLINE_VISIBILITY static _LIBCPP_CONSTEXPR type round_error() _NOEXCEPT {return type(0);}
276*58b9f456SAndroid Build Coastguard Worker
277*58b9f456SAndroid Build Coastguard Worker    static _LIBCPP_CONSTEXPR const int  min_exponent = 0;
278*58b9f456SAndroid Build Coastguard Worker    static _LIBCPP_CONSTEXPR const int  min_exponent10 = 0;
279*58b9f456SAndroid Build Coastguard Worker    static _LIBCPP_CONSTEXPR const int  max_exponent = 0;
280*58b9f456SAndroid Build Coastguard Worker    static _LIBCPP_CONSTEXPR const int  max_exponent10 = 0;
281*58b9f456SAndroid Build Coastguard Worker
282*58b9f456SAndroid Build Coastguard Worker    static _LIBCPP_CONSTEXPR const bool has_infinity = false;
283*58b9f456SAndroid Build Coastguard Worker    static _LIBCPP_CONSTEXPR const bool has_quiet_NaN = false;
284*58b9f456SAndroid Build Coastguard Worker    static _LIBCPP_CONSTEXPR const bool has_signaling_NaN = false;
285*58b9f456SAndroid Build Coastguard Worker    static _LIBCPP_CONSTEXPR const float_denorm_style has_denorm = denorm_absent;
286*58b9f456SAndroid Build Coastguard Worker    static _LIBCPP_CONSTEXPR const bool has_denorm_loss = false;
287*58b9f456SAndroid Build Coastguard Worker    _LIBCPP_INLINE_VISIBILITY static _LIBCPP_CONSTEXPR type infinity() _NOEXCEPT {return type(0);}
288*58b9f456SAndroid Build Coastguard Worker    _LIBCPP_INLINE_VISIBILITY static _LIBCPP_CONSTEXPR type quiet_NaN() _NOEXCEPT {return type(0);}
289*58b9f456SAndroid Build Coastguard Worker    _LIBCPP_INLINE_VISIBILITY static _LIBCPP_CONSTEXPR type signaling_NaN() _NOEXCEPT {return type(0);}
290*58b9f456SAndroid Build Coastguard Worker    _LIBCPP_INLINE_VISIBILITY static _LIBCPP_CONSTEXPR type denorm_min() _NOEXCEPT {return type(0);}
291*58b9f456SAndroid Build Coastguard Worker
292*58b9f456SAndroid Build Coastguard Worker    static _LIBCPP_CONSTEXPR const bool is_iec559 = false;
293*58b9f456SAndroid Build Coastguard Worker    static _LIBCPP_CONSTEXPR const bool is_bounded = true;
294*58b9f456SAndroid Build Coastguard Worker    static _LIBCPP_CONSTEXPR const bool is_modulo = false;
295*58b9f456SAndroid Build Coastguard Worker
296*58b9f456SAndroid Build Coastguard Worker    static _LIBCPP_CONSTEXPR const bool traps = false;
297*58b9f456SAndroid Build Coastguard Worker    static _LIBCPP_CONSTEXPR const bool tinyness_before = false;
298*58b9f456SAndroid Build Coastguard Worker    static _LIBCPP_CONSTEXPR const float_round_style round_style = round_toward_zero;
299*58b9f456SAndroid Build Coastguard Worker};
300*58b9f456SAndroid Build Coastguard Worker
301*58b9f456SAndroid Build Coastguard Workertemplate <>
302*58b9f456SAndroid Build Coastguard Workerclass __libcpp_numeric_limits<float, true>
303*58b9f456SAndroid Build Coastguard Worker{
304*58b9f456SAndroid Build Coastguard Workerprotected:
305*58b9f456SAndroid Build Coastguard Worker    typedef float type;
306*58b9f456SAndroid Build Coastguard Worker
307*58b9f456SAndroid Build Coastguard Worker    static _LIBCPP_CONSTEXPR const bool is_specialized = true;
308*58b9f456SAndroid Build Coastguard Worker
309*58b9f456SAndroid Build Coastguard Worker    static _LIBCPP_CONSTEXPR const bool is_signed = true;
310*58b9f456SAndroid Build Coastguard Worker    static _LIBCPP_CONSTEXPR const int  digits = __FLT_MANT_DIG__;
311*58b9f456SAndroid Build Coastguard Worker    static _LIBCPP_CONSTEXPR const int  digits10 = __FLT_DIG__;
312*58b9f456SAndroid Build Coastguard Worker    static _LIBCPP_CONSTEXPR const int  max_digits10 = 2+(digits * 30103l)/100000l;
313*58b9f456SAndroid Build Coastguard Worker    _LIBCPP_INLINE_VISIBILITY static _LIBCPP_CONSTEXPR type min() _NOEXCEPT {return __FLT_MIN__;}
314*58b9f456SAndroid Build Coastguard Worker    _LIBCPP_INLINE_VISIBILITY static _LIBCPP_CONSTEXPR type max() _NOEXCEPT {return __FLT_MAX__;}
315*58b9f456SAndroid Build Coastguard Worker    _LIBCPP_INLINE_VISIBILITY static _LIBCPP_CONSTEXPR type lowest() _NOEXCEPT {return -max();}
316*58b9f456SAndroid Build Coastguard Worker
317*58b9f456SAndroid Build Coastguard Worker    static _LIBCPP_CONSTEXPR const bool is_integer = false;
318*58b9f456SAndroid Build Coastguard Worker    static _LIBCPP_CONSTEXPR const bool is_exact = false;
319*58b9f456SAndroid Build Coastguard Worker    static _LIBCPP_CONSTEXPR const int  radix = __FLT_RADIX__;
320*58b9f456SAndroid Build Coastguard Worker    _LIBCPP_INLINE_VISIBILITY static _LIBCPP_CONSTEXPR type epsilon() _NOEXCEPT {return __FLT_EPSILON__;}
321*58b9f456SAndroid Build Coastguard Worker    _LIBCPP_INLINE_VISIBILITY static _LIBCPP_CONSTEXPR type round_error() _NOEXCEPT {return 0.5F;}
322*58b9f456SAndroid Build Coastguard Worker
323*58b9f456SAndroid Build Coastguard Worker    static _LIBCPP_CONSTEXPR const int  min_exponent = __FLT_MIN_EXP__;
324*58b9f456SAndroid Build Coastguard Worker    static _LIBCPP_CONSTEXPR const int  min_exponent10 = __FLT_MIN_10_EXP__;
325*58b9f456SAndroid Build Coastguard Worker    static _LIBCPP_CONSTEXPR const int  max_exponent = __FLT_MAX_EXP__;
326*58b9f456SAndroid Build Coastguard Worker    static _LIBCPP_CONSTEXPR const int  max_exponent10 = __FLT_MAX_10_EXP__;
327*58b9f456SAndroid Build Coastguard Worker
328*58b9f456SAndroid Build Coastguard Worker    static _LIBCPP_CONSTEXPR const bool has_infinity = true;
329*58b9f456SAndroid Build Coastguard Worker    static _LIBCPP_CONSTEXPR const bool has_quiet_NaN = true;
330*58b9f456SAndroid Build Coastguard Worker    static _LIBCPP_CONSTEXPR const bool has_signaling_NaN = true;
331*58b9f456SAndroid Build Coastguard Worker    static _LIBCPP_CONSTEXPR const float_denorm_style has_denorm = denorm_present;
332*58b9f456SAndroid Build Coastguard Worker    static _LIBCPP_CONSTEXPR const bool has_denorm_loss = false;
333*58b9f456SAndroid Build Coastguard Worker    _LIBCPP_INLINE_VISIBILITY static _LIBCPP_CONSTEXPR type infinity() _NOEXCEPT {return __builtin_huge_valf();}
334*58b9f456SAndroid Build Coastguard Worker    _LIBCPP_INLINE_VISIBILITY static _LIBCPP_CONSTEXPR type quiet_NaN() _NOEXCEPT {return __builtin_nanf("");}
335*58b9f456SAndroid Build Coastguard Worker    _LIBCPP_INLINE_VISIBILITY static _LIBCPP_CONSTEXPR type signaling_NaN() _NOEXCEPT {return __builtin_nansf("");}
336*58b9f456SAndroid Build Coastguard Worker    _LIBCPP_INLINE_VISIBILITY static _LIBCPP_CONSTEXPR type denorm_min() _NOEXCEPT {return __FLT_DENORM_MIN__;}
337*58b9f456SAndroid Build Coastguard Worker
338*58b9f456SAndroid Build Coastguard Worker    static _LIBCPP_CONSTEXPR const bool is_iec559 = true;
339*58b9f456SAndroid Build Coastguard Worker    static _LIBCPP_CONSTEXPR const bool is_bounded = true;
340*58b9f456SAndroid Build Coastguard Worker    static _LIBCPP_CONSTEXPR const bool is_modulo = false;
341*58b9f456SAndroid Build Coastguard Worker
342*58b9f456SAndroid Build Coastguard Worker    static _LIBCPP_CONSTEXPR const bool traps = false;
343*58b9f456SAndroid Build Coastguard Worker    static _LIBCPP_CONSTEXPR const bool tinyness_before = false;
344*58b9f456SAndroid Build Coastguard Worker    static _LIBCPP_CONSTEXPR const float_round_style round_style = round_to_nearest;
345*58b9f456SAndroid Build Coastguard Worker};
346*58b9f456SAndroid Build Coastguard Worker
347*58b9f456SAndroid Build Coastguard Workertemplate <>
348*58b9f456SAndroid Build Coastguard Workerclass __libcpp_numeric_limits<double, true>
349*58b9f456SAndroid Build Coastguard Worker{
350*58b9f456SAndroid Build Coastguard Workerprotected:
351*58b9f456SAndroid Build Coastguard Worker    typedef double type;
352*58b9f456SAndroid Build Coastguard Worker
353*58b9f456SAndroid Build Coastguard Worker    static _LIBCPP_CONSTEXPR const bool is_specialized = true;
354*58b9f456SAndroid Build Coastguard Worker
355*58b9f456SAndroid Build Coastguard Worker    static _LIBCPP_CONSTEXPR const bool is_signed = true;
356*58b9f456SAndroid Build Coastguard Worker    static _LIBCPP_CONSTEXPR const int  digits = __DBL_MANT_DIG__;
357*58b9f456SAndroid Build Coastguard Worker    static _LIBCPP_CONSTEXPR const int  digits10 = __DBL_DIG__;
358*58b9f456SAndroid Build Coastguard Worker    static _LIBCPP_CONSTEXPR const int  max_digits10 = 2+(digits * 30103l)/100000l;
359*58b9f456SAndroid Build Coastguard Worker    _LIBCPP_INLINE_VISIBILITY static _LIBCPP_CONSTEXPR type min() _NOEXCEPT {return __DBL_MIN__;}
360*58b9f456SAndroid Build Coastguard Worker    _LIBCPP_INLINE_VISIBILITY static _LIBCPP_CONSTEXPR type max() _NOEXCEPT {return __DBL_MAX__;}
361*58b9f456SAndroid Build Coastguard Worker    _LIBCPP_INLINE_VISIBILITY static _LIBCPP_CONSTEXPR type lowest() _NOEXCEPT {return -max();}
362*58b9f456SAndroid Build Coastguard Worker
363*58b9f456SAndroid Build Coastguard Worker    static _LIBCPP_CONSTEXPR const bool is_integer = false;
364*58b9f456SAndroid Build Coastguard Worker    static _LIBCPP_CONSTEXPR const bool is_exact = false;
365*58b9f456SAndroid Build Coastguard Worker    static _LIBCPP_CONSTEXPR const int  radix = __FLT_RADIX__;
366*58b9f456SAndroid Build Coastguard Worker    _LIBCPP_INLINE_VISIBILITY static _LIBCPP_CONSTEXPR type epsilon() _NOEXCEPT {return __DBL_EPSILON__;}
367*58b9f456SAndroid Build Coastguard Worker    _LIBCPP_INLINE_VISIBILITY static _LIBCPP_CONSTEXPR type round_error() _NOEXCEPT {return 0.5;}
368*58b9f456SAndroid Build Coastguard Worker
369*58b9f456SAndroid Build Coastguard Worker    static _LIBCPP_CONSTEXPR const int  min_exponent = __DBL_MIN_EXP__;
370*58b9f456SAndroid Build Coastguard Worker    static _LIBCPP_CONSTEXPR const int  min_exponent10 = __DBL_MIN_10_EXP__;
371*58b9f456SAndroid Build Coastguard Worker    static _LIBCPP_CONSTEXPR const int  max_exponent = __DBL_MAX_EXP__;
372*58b9f456SAndroid Build Coastguard Worker    static _LIBCPP_CONSTEXPR const int  max_exponent10 = __DBL_MAX_10_EXP__;
373*58b9f456SAndroid Build Coastguard Worker
374*58b9f456SAndroid Build Coastguard Worker    static _LIBCPP_CONSTEXPR const bool has_infinity = true;
375*58b9f456SAndroid Build Coastguard Worker    static _LIBCPP_CONSTEXPR const bool has_quiet_NaN = true;
376*58b9f456SAndroid Build Coastguard Worker    static _LIBCPP_CONSTEXPR const bool has_signaling_NaN = true;
377*58b9f456SAndroid Build Coastguard Worker    static _LIBCPP_CONSTEXPR const float_denorm_style has_denorm = denorm_present;
378*58b9f456SAndroid Build Coastguard Worker    static _LIBCPP_CONSTEXPR const bool has_denorm_loss = false;
379*58b9f456SAndroid Build Coastguard Worker    _LIBCPP_INLINE_VISIBILITY static _LIBCPP_CONSTEXPR type infinity() _NOEXCEPT {return __builtin_huge_val();}
380*58b9f456SAndroid Build Coastguard Worker    _LIBCPP_INLINE_VISIBILITY static _LIBCPP_CONSTEXPR type quiet_NaN() _NOEXCEPT {return __builtin_nan("");}
381*58b9f456SAndroid Build Coastguard Worker    _LIBCPP_INLINE_VISIBILITY static _LIBCPP_CONSTEXPR type signaling_NaN() _NOEXCEPT {return __builtin_nans("");}
382*58b9f456SAndroid Build Coastguard Worker    _LIBCPP_INLINE_VISIBILITY static _LIBCPP_CONSTEXPR type denorm_min() _NOEXCEPT {return __DBL_DENORM_MIN__;}
383*58b9f456SAndroid Build Coastguard Worker
384*58b9f456SAndroid Build Coastguard Worker    static _LIBCPP_CONSTEXPR const bool is_iec559 = true;
385*58b9f456SAndroid Build Coastguard Worker    static _LIBCPP_CONSTEXPR const bool is_bounded = true;
386*58b9f456SAndroid Build Coastguard Worker    static _LIBCPP_CONSTEXPR const bool is_modulo = false;
387*58b9f456SAndroid Build Coastguard Worker
388*58b9f456SAndroid Build Coastguard Worker    static _LIBCPP_CONSTEXPR const bool traps = false;
389*58b9f456SAndroid Build Coastguard Worker    static _LIBCPP_CONSTEXPR const bool tinyness_before = false;
390*58b9f456SAndroid Build Coastguard Worker    static _LIBCPP_CONSTEXPR const float_round_style round_style = round_to_nearest;
391*58b9f456SAndroid Build Coastguard Worker};
392*58b9f456SAndroid Build Coastguard Worker
393*58b9f456SAndroid Build Coastguard Workertemplate <>
394*58b9f456SAndroid Build Coastguard Workerclass __libcpp_numeric_limits<long double, true>
395*58b9f456SAndroid Build Coastguard Worker{
396*58b9f456SAndroid Build Coastguard Workerprotected:
397*58b9f456SAndroid Build Coastguard Worker    typedef long double type;
398*58b9f456SAndroid Build Coastguard Worker
399*58b9f456SAndroid Build Coastguard Worker    static _LIBCPP_CONSTEXPR const bool is_specialized = true;
400*58b9f456SAndroid Build Coastguard Worker
401*58b9f456SAndroid Build Coastguard Worker    static _LIBCPP_CONSTEXPR const bool is_signed = true;
402*58b9f456SAndroid Build Coastguard Worker    static _LIBCPP_CONSTEXPR const int  digits = __LDBL_MANT_DIG__;
403*58b9f456SAndroid Build Coastguard Worker    static _LIBCPP_CONSTEXPR const int  digits10 = __LDBL_DIG__;
404*58b9f456SAndroid Build Coastguard Worker    static _LIBCPP_CONSTEXPR const int  max_digits10 = 2+(digits * 30103l)/100000l;
405*58b9f456SAndroid Build Coastguard Worker    _LIBCPP_INLINE_VISIBILITY static _LIBCPP_CONSTEXPR type min() _NOEXCEPT {return __LDBL_MIN__;}
406*58b9f456SAndroid Build Coastguard Worker    _LIBCPP_INLINE_VISIBILITY static _LIBCPP_CONSTEXPR type max() _NOEXCEPT {return __LDBL_MAX__;}
407*58b9f456SAndroid Build Coastguard Worker    _LIBCPP_INLINE_VISIBILITY static _LIBCPP_CONSTEXPR type lowest() _NOEXCEPT {return -max();}
408*58b9f456SAndroid Build Coastguard Worker
409*58b9f456SAndroid Build Coastguard Worker    static _LIBCPP_CONSTEXPR const bool is_integer = false;
410*58b9f456SAndroid Build Coastguard Worker    static _LIBCPP_CONSTEXPR const bool is_exact = false;
411*58b9f456SAndroid Build Coastguard Worker    static _LIBCPP_CONSTEXPR const int  radix = __FLT_RADIX__;
412*58b9f456SAndroid Build Coastguard Worker    _LIBCPP_INLINE_VISIBILITY static _LIBCPP_CONSTEXPR type epsilon() _NOEXCEPT {return __LDBL_EPSILON__;}
413*58b9f456SAndroid Build Coastguard Worker    _LIBCPP_INLINE_VISIBILITY static _LIBCPP_CONSTEXPR type round_error() _NOEXCEPT {return 0.5;}
414*58b9f456SAndroid Build Coastguard Worker
415*58b9f456SAndroid Build Coastguard Worker    static _LIBCPP_CONSTEXPR const int  min_exponent = __LDBL_MIN_EXP__;
416*58b9f456SAndroid Build Coastguard Worker    static _LIBCPP_CONSTEXPR const int  min_exponent10 = __LDBL_MIN_10_EXP__;
417*58b9f456SAndroid Build Coastguard Worker    static _LIBCPP_CONSTEXPR const int  max_exponent = __LDBL_MAX_EXP__;
418*58b9f456SAndroid Build Coastguard Worker    static _LIBCPP_CONSTEXPR const int  max_exponent10 = __LDBL_MAX_10_EXP__;
419*58b9f456SAndroid Build Coastguard Worker
420*58b9f456SAndroid Build Coastguard Worker    static _LIBCPP_CONSTEXPR const bool has_infinity = true;
421*58b9f456SAndroid Build Coastguard Worker    static _LIBCPP_CONSTEXPR const bool has_quiet_NaN = true;
422*58b9f456SAndroid Build Coastguard Worker    static _LIBCPP_CONSTEXPR const bool has_signaling_NaN = true;
423*58b9f456SAndroid Build Coastguard Worker    static _LIBCPP_CONSTEXPR const float_denorm_style has_denorm = denorm_present;
424*58b9f456SAndroid Build Coastguard Worker    static _LIBCPP_CONSTEXPR const bool has_denorm_loss = false;
425*58b9f456SAndroid Build Coastguard Worker    _LIBCPP_INLINE_VISIBILITY static _LIBCPP_CONSTEXPR type infinity() _NOEXCEPT {return __builtin_huge_vall();}
426*58b9f456SAndroid Build Coastguard Worker    _LIBCPP_INLINE_VISIBILITY static _LIBCPP_CONSTEXPR type quiet_NaN() _NOEXCEPT {return __builtin_nanl("");}
427*58b9f456SAndroid Build Coastguard Worker    _LIBCPP_INLINE_VISIBILITY static _LIBCPP_CONSTEXPR type signaling_NaN() _NOEXCEPT {return __builtin_nansl("");}
428*58b9f456SAndroid Build Coastguard Worker    _LIBCPP_INLINE_VISIBILITY static _LIBCPP_CONSTEXPR type denorm_min() _NOEXCEPT {return __LDBL_DENORM_MIN__;}
429*58b9f456SAndroid Build Coastguard Worker
430*58b9f456SAndroid Build Coastguard Worker#if (defined(__ppc__) || defined(__ppc64__))
431*58b9f456SAndroid Build Coastguard Worker    static _LIBCPP_CONSTEXPR const bool is_iec559 = false;
432*58b9f456SAndroid Build Coastguard Worker#else
433*58b9f456SAndroid Build Coastguard Worker    static _LIBCPP_CONSTEXPR const bool is_iec559 = true;
434*58b9f456SAndroid Build Coastguard Worker#endif
435*58b9f456SAndroid Build Coastguard Worker    static _LIBCPP_CONSTEXPR const bool is_bounded = true;
436*58b9f456SAndroid Build Coastguard Worker    static _LIBCPP_CONSTEXPR const bool is_modulo = false;
437*58b9f456SAndroid Build Coastguard Worker
438*58b9f456SAndroid Build Coastguard Worker    static _LIBCPP_CONSTEXPR const bool traps = false;
439*58b9f456SAndroid Build Coastguard Worker    static _LIBCPP_CONSTEXPR const bool tinyness_before = false;
440*58b9f456SAndroid Build Coastguard Worker    static _LIBCPP_CONSTEXPR const float_round_style round_style = round_to_nearest;
441*58b9f456SAndroid Build Coastguard Worker};
442*58b9f456SAndroid Build Coastguard Worker
443*58b9f456SAndroid Build Coastguard Workertemplate <class _Tp>
444*58b9f456SAndroid Build Coastguard Workerclass _LIBCPP_TEMPLATE_VIS numeric_limits
445*58b9f456SAndroid Build Coastguard Worker    : private __libcpp_numeric_limits<typename remove_cv<_Tp>::type>
446*58b9f456SAndroid Build Coastguard Worker{
447*58b9f456SAndroid Build Coastguard Worker    typedef __libcpp_numeric_limits<typename remove_cv<_Tp>::type> __base;
448*58b9f456SAndroid Build Coastguard Worker    typedef typename __base::type type;
449*58b9f456SAndroid Build Coastguard Workerpublic:
450*58b9f456SAndroid Build Coastguard Worker    static _LIBCPP_CONSTEXPR const bool is_specialized = __base::is_specialized;
451*58b9f456SAndroid Build Coastguard Worker    _LIBCPP_INLINE_VISIBILITY static _LIBCPP_CONSTEXPR type min() _NOEXCEPT {return __base::min();}
452*58b9f456SAndroid Build Coastguard Worker    _LIBCPP_INLINE_VISIBILITY static _LIBCPP_CONSTEXPR type max() _NOEXCEPT {return __base::max();}
453*58b9f456SAndroid Build Coastguard Worker    _LIBCPP_INLINE_VISIBILITY static _LIBCPP_CONSTEXPR type lowest() _NOEXCEPT {return __base::lowest();}
454*58b9f456SAndroid Build Coastguard Worker
455*58b9f456SAndroid Build Coastguard Worker    static _LIBCPP_CONSTEXPR const int  digits = __base::digits;
456*58b9f456SAndroid Build Coastguard Worker    static _LIBCPP_CONSTEXPR const int  digits10 = __base::digits10;
457*58b9f456SAndroid Build Coastguard Worker    static _LIBCPP_CONSTEXPR const int  max_digits10 = __base::max_digits10;
458*58b9f456SAndroid Build Coastguard Worker    static _LIBCPP_CONSTEXPR const bool is_signed = __base::is_signed;
459*58b9f456SAndroid Build Coastguard Worker    static _LIBCPP_CONSTEXPR const bool is_integer = __base::is_integer;
460*58b9f456SAndroid Build Coastguard Worker    static _LIBCPP_CONSTEXPR const bool is_exact = __base::is_exact;
461*58b9f456SAndroid Build Coastguard Worker    static _LIBCPP_CONSTEXPR const int  radix = __base::radix;
462*58b9f456SAndroid Build Coastguard Worker    _LIBCPP_INLINE_VISIBILITY static _LIBCPP_CONSTEXPR type epsilon() _NOEXCEPT {return __base::epsilon();}
463*58b9f456SAndroid Build Coastguard Worker    _LIBCPP_INLINE_VISIBILITY static _LIBCPP_CONSTEXPR type round_error() _NOEXCEPT {return __base::round_error();}
464*58b9f456SAndroid Build Coastguard Worker
465*58b9f456SAndroid Build Coastguard Worker    static _LIBCPP_CONSTEXPR const int  min_exponent = __base::min_exponent;
466*58b9f456SAndroid Build Coastguard Worker    static _LIBCPP_CONSTEXPR const int  min_exponent10 = __base::min_exponent10;
467*58b9f456SAndroid Build Coastguard Worker    static _LIBCPP_CONSTEXPR const int  max_exponent = __base::max_exponent;
468*58b9f456SAndroid Build Coastguard Worker    static _LIBCPP_CONSTEXPR const int  max_exponent10 = __base::max_exponent10;
469*58b9f456SAndroid Build Coastguard Worker
470*58b9f456SAndroid Build Coastguard Worker    static _LIBCPP_CONSTEXPR const bool has_infinity = __base::has_infinity;
471*58b9f456SAndroid Build Coastguard Worker    static _LIBCPP_CONSTEXPR const bool has_quiet_NaN = __base::has_quiet_NaN;
472*58b9f456SAndroid Build Coastguard Worker    static _LIBCPP_CONSTEXPR const bool has_signaling_NaN = __base::has_signaling_NaN;
473*58b9f456SAndroid Build Coastguard Worker    static _LIBCPP_CONSTEXPR const float_denorm_style has_denorm = __base::has_denorm;
474*58b9f456SAndroid Build Coastguard Worker    static _LIBCPP_CONSTEXPR const bool has_denorm_loss = __base::has_denorm_loss;
475*58b9f456SAndroid Build Coastguard Worker    _LIBCPP_INLINE_VISIBILITY static _LIBCPP_CONSTEXPR type infinity() _NOEXCEPT {return __base::infinity();}
476*58b9f456SAndroid Build Coastguard Worker    _LIBCPP_INLINE_VISIBILITY static _LIBCPP_CONSTEXPR type quiet_NaN() _NOEXCEPT {return __base::quiet_NaN();}
477*58b9f456SAndroid Build Coastguard Worker    _LIBCPP_INLINE_VISIBILITY static _LIBCPP_CONSTEXPR type signaling_NaN() _NOEXCEPT {return __base::signaling_NaN();}
478*58b9f456SAndroid Build Coastguard Worker    _LIBCPP_INLINE_VISIBILITY static _LIBCPP_CONSTEXPR type denorm_min() _NOEXCEPT {return __base::denorm_min();}
479*58b9f456SAndroid Build Coastguard Worker
480*58b9f456SAndroid Build Coastguard Worker    static _LIBCPP_CONSTEXPR const bool is_iec559 = __base::is_iec559;
481*58b9f456SAndroid Build Coastguard Worker    static _LIBCPP_CONSTEXPR const bool is_bounded = __base::is_bounded;
482*58b9f456SAndroid Build Coastguard Worker    static _LIBCPP_CONSTEXPR const bool is_modulo = __base::is_modulo;
483*58b9f456SAndroid Build Coastguard Worker
484*58b9f456SAndroid Build Coastguard Worker    static _LIBCPP_CONSTEXPR const bool traps = __base::traps;
485*58b9f456SAndroid Build Coastguard Worker    static _LIBCPP_CONSTEXPR const bool tinyness_before = __base::tinyness_before;
486*58b9f456SAndroid Build Coastguard Worker    static _LIBCPP_CONSTEXPR const float_round_style round_style = __base::round_style;
487*58b9f456SAndroid Build Coastguard Worker};
488*58b9f456SAndroid Build Coastguard Worker
489*58b9f456SAndroid Build Coastguard Workertemplate <class _Tp>
490*58b9f456SAndroid Build Coastguard Worker    _LIBCPP_CONSTEXPR const bool numeric_limits<_Tp>::is_specialized;
491*58b9f456SAndroid Build Coastguard Workertemplate <class _Tp>
492*58b9f456SAndroid Build Coastguard Worker    _LIBCPP_CONSTEXPR const int numeric_limits<_Tp>::digits;
493*58b9f456SAndroid Build Coastguard Workertemplate <class _Tp>
494*58b9f456SAndroid Build Coastguard Worker    _LIBCPP_CONSTEXPR const int numeric_limits<_Tp>::digits10;
495*58b9f456SAndroid Build Coastguard Workertemplate <class _Tp>
496*58b9f456SAndroid Build Coastguard Worker    _LIBCPP_CONSTEXPR const int numeric_limits<_Tp>::max_digits10;
497*58b9f456SAndroid Build Coastguard Workertemplate <class _Tp>
498*58b9f456SAndroid Build Coastguard Worker    _LIBCPP_CONSTEXPR const bool numeric_limits<_Tp>::is_signed;
499*58b9f456SAndroid Build Coastguard Workertemplate <class _Tp>
500*58b9f456SAndroid Build Coastguard Worker    _LIBCPP_CONSTEXPR const bool numeric_limits<_Tp>::is_integer;
501*58b9f456SAndroid Build Coastguard Workertemplate <class _Tp>
502*58b9f456SAndroid Build Coastguard Worker    _LIBCPP_CONSTEXPR const bool numeric_limits<_Tp>::is_exact;
503*58b9f456SAndroid Build Coastguard Workertemplate <class _Tp>
504*58b9f456SAndroid Build Coastguard Worker    _LIBCPP_CONSTEXPR const int numeric_limits<_Tp>::radix;
505*58b9f456SAndroid Build Coastguard Workertemplate <class _Tp>
506*58b9f456SAndroid Build Coastguard Worker    _LIBCPP_CONSTEXPR const int numeric_limits<_Tp>::min_exponent;
507*58b9f456SAndroid Build Coastguard Workertemplate <class _Tp>
508*58b9f456SAndroid Build Coastguard Worker    _LIBCPP_CONSTEXPR const int numeric_limits<_Tp>::min_exponent10;
509*58b9f456SAndroid Build Coastguard Workertemplate <class _Tp>
510*58b9f456SAndroid Build Coastguard Worker    _LIBCPP_CONSTEXPR const int numeric_limits<_Tp>::max_exponent;
511*58b9f456SAndroid Build Coastguard Workertemplate <class _Tp>
512*58b9f456SAndroid Build Coastguard Worker    _LIBCPP_CONSTEXPR const int numeric_limits<_Tp>::max_exponent10;
513*58b9f456SAndroid Build Coastguard Workertemplate <class _Tp>
514*58b9f456SAndroid Build Coastguard Worker    _LIBCPP_CONSTEXPR const bool numeric_limits<_Tp>::has_infinity;
515*58b9f456SAndroid Build Coastguard Workertemplate <class _Tp>
516*58b9f456SAndroid Build Coastguard Worker    _LIBCPP_CONSTEXPR const bool numeric_limits<_Tp>::has_quiet_NaN;
517*58b9f456SAndroid Build Coastguard Workertemplate <class _Tp>
518*58b9f456SAndroid Build Coastguard Worker    _LIBCPP_CONSTEXPR const bool numeric_limits<_Tp>::has_signaling_NaN;
519*58b9f456SAndroid Build Coastguard Workertemplate <class _Tp>
520*58b9f456SAndroid Build Coastguard Worker    _LIBCPP_CONSTEXPR const float_denorm_style numeric_limits<_Tp>::has_denorm;
521*58b9f456SAndroid Build Coastguard Workertemplate <class _Tp>
522*58b9f456SAndroid Build Coastguard Worker    _LIBCPP_CONSTEXPR const bool numeric_limits<_Tp>::has_denorm_loss;
523*58b9f456SAndroid Build Coastguard Workertemplate <class _Tp>
524*58b9f456SAndroid Build Coastguard Worker    _LIBCPP_CONSTEXPR const bool numeric_limits<_Tp>::is_iec559;
525*58b9f456SAndroid Build Coastguard Workertemplate <class _Tp>
526*58b9f456SAndroid Build Coastguard Worker    _LIBCPP_CONSTEXPR const bool numeric_limits<_Tp>::is_bounded;
527*58b9f456SAndroid Build Coastguard Workertemplate <class _Tp>
528*58b9f456SAndroid Build Coastguard Worker    _LIBCPP_CONSTEXPR const bool numeric_limits<_Tp>::is_modulo;
529*58b9f456SAndroid Build Coastguard Workertemplate <class _Tp>
530*58b9f456SAndroid Build Coastguard Worker    _LIBCPP_CONSTEXPR const bool numeric_limits<_Tp>::traps;
531*58b9f456SAndroid Build Coastguard Workertemplate <class _Tp>
532*58b9f456SAndroid Build Coastguard Worker    _LIBCPP_CONSTEXPR const bool numeric_limits<_Tp>::tinyness_before;
533*58b9f456SAndroid Build Coastguard Workertemplate <class _Tp>
534*58b9f456SAndroid Build Coastguard Worker    _LIBCPP_CONSTEXPR const float_round_style numeric_limits<_Tp>::round_style;
535*58b9f456SAndroid Build Coastguard Worker
536*58b9f456SAndroid Build Coastguard Workertemplate <class _Tp>
537*58b9f456SAndroid Build Coastguard Workerclass _LIBCPP_TEMPLATE_VIS numeric_limits<const _Tp>
538*58b9f456SAndroid Build Coastguard Worker    : private numeric_limits<_Tp>
539*58b9f456SAndroid Build Coastguard Worker{
540*58b9f456SAndroid Build Coastguard Worker    typedef numeric_limits<_Tp> __base;
541*58b9f456SAndroid Build Coastguard Worker    typedef _Tp type;
542*58b9f456SAndroid Build Coastguard Workerpublic:
543*58b9f456SAndroid Build Coastguard Worker    static _LIBCPP_CONSTEXPR const bool is_specialized = __base::is_specialized;
544*58b9f456SAndroid Build Coastguard Worker    _LIBCPP_INLINE_VISIBILITY static _LIBCPP_CONSTEXPR type min() _NOEXCEPT {return __base::min();}
545*58b9f456SAndroid Build Coastguard Worker    _LIBCPP_INLINE_VISIBILITY static _LIBCPP_CONSTEXPR type max() _NOEXCEPT {return __base::max();}
546*58b9f456SAndroid Build Coastguard Worker    _LIBCPP_INLINE_VISIBILITY static _LIBCPP_CONSTEXPR type lowest() _NOEXCEPT {return __base::lowest();}
547*58b9f456SAndroid Build Coastguard Worker
548*58b9f456SAndroid Build Coastguard Worker    static _LIBCPP_CONSTEXPR const int  digits = __base::digits;
549*58b9f456SAndroid Build Coastguard Worker    static _LIBCPP_CONSTEXPR const int  digits10 = __base::digits10;
550*58b9f456SAndroid Build Coastguard Worker    static _LIBCPP_CONSTEXPR const int  max_digits10 = __base::max_digits10;
551*58b9f456SAndroid Build Coastguard Worker    static _LIBCPP_CONSTEXPR const bool is_signed = __base::is_signed;
552*58b9f456SAndroid Build Coastguard Worker    static _LIBCPP_CONSTEXPR const bool is_integer = __base::is_integer;
553*58b9f456SAndroid Build Coastguard Worker    static _LIBCPP_CONSTEXPR const bool is_exact = __base::is_exact;
554*58b9f456SAndroid Build Coastguard Worker    static _LIBCPP_CONSTEXPR const int  radix = __base::radix;
555*58b9f456SAndroid Build Coastguard Worker    _LIBCPP_INLINE_VISIBILITY static _LIBCPP_CONSTEXPR type epsilon() _NOEXCEPT {return __base::epsilon();}
556*58b9f456SAndroid Build Coastguard Worker    _LIBCPP_INLINE_VISIBILITY static _LIBCPP_CONSTEXPR type round_error() _NOEXCEPT {return __base::round_error();}
557*58b9f456SAndroid Build Coastguard Worker
558*58b9f456SAndroid Build Coastguard Worker    static _LIBCPP_CONSTEXPR const int  min_exponent = __base::min_exponent;
559*58b9f456SAndroid Build Coastguard Worker    static _LIBCPP_CONSTEXPR const int  min_exponent10 = __base::min_exponent10;
560*58b9f456SAndroid Build Coastguard Worker    static _LIBCPP_CONSTEXPR const int  max_exponent = __base::max_exponent;
561*58b9f456SAndroid Build Coastguard Worker    static _LIBCPP_CONSTEXPR const int  max_exponent10 = __base::max_exponent10;
562*58b9f456SAndroid Build Coastguard Worker
563*58b9f456SAndroid Build Coastguard Worker    static _LIBCPP_CONSTEXPR const bool has_infinity = __base::has_infinity;
564*58b9f456SAndroid Build Coastguard Worker    static _LIBCPP_CONSTEXPR const bool has_quiet_NaN = __base::has_quiet_NaN;
565*58b9f456SAndroid Build Coastguard Worker    static _LIBCPP_CONSTEXPR const bool has_signaling_NaN = __base::has_signaling_NaN;
566*58b9f456SAndroid Build Coastguard Worker    static _LIBCPP_CONSTEXPR const float_denorm_style has_denorm = __base::has_denorm;
567*58b9f456SAndroid Build Coastguard Worker    static _LIBCPP_CONSTEXPR const bool has_denorm_loss = __base::has_denorm_loss;
568*58b9f456SAndroid Build Coastguard Worker    _LIBCPP_INLINE_VISIBILITY static _LIBCPP_CONSTEXPR type infinity() _NOEXCEPT {return __base::infinity();}
569*58b9f456SAndroid Build Coastguard Worker    _LIBCPP_INLINE_VISIBILITY static _LIBCPP_CONSTEXPR type quiet_NaN() _NOEXCEPT {return __base::quiet_NaN();}
570*58b9f456SAndroid Build Coastguard Worker    _LIBCPP_INLINE_VISIBILITY static _LIBCPP_CONSTEXPR type signaling_NaN() _NOEXCEPT {return __base::signaling_NaN();}
571*58b9f456SAndroid Build Coastguard Worker    _LIBCPP_INLINE_VISIBILITY static _LIBCPP_CONSTEXPR type denorm_min() _NOEXCEPT {return __base::denorm_min();}
572*58b9f456SAndroid Build Coastguard Worker
573*58b9f456SAndroid Build Coastguard Worker    static _LIBCPP_CONSTEXPR const bool is_iec559 = __base::is_iec559;
574*58b9f456SAndroid Build Coastguard Worker    static _LIBCPP_CONSTEXPR const bool is_bounded = __base::is_bounded;
575*58b9f456SAndroid Build Coastguard Worker    static _LIBCPP_CONSTEXPR const bool is_modulo = __base::is_modulo;
576*58b9f456SAndroid Build Coastguard Worker
577*58b9f456SAndroid Build Coastguard Worker    static _LIBCPP_CONSTEXPR const bool traps = __base::traps;
578*58b9f456SAndroid Build Coastguard Worker    static _LIBCPP_CONSTEXPR const bool tinyness_before = __base::tinyness_before;
579*58b9f456SAndroid Build Coastguard Worker    static _LIBCPP_CONSTEXPR const float_round_style round_style = __base::round_style;
580*58b9f456SAndroid Build Coastguard Worker};
581*58b9f456SAndroid Build Coastguard Worker
582*58b9f456SAndroid Build Coastguard Workertemplate <class _Tp>
583*58b9f456SAndroid Build Coastguard Worker    _LIBCPP_CONSTEXPR const bool numeric_limits<const _Tp>::is_specialized;
584*58b9f456SAndroid Build Coastguard Workertemplate <class _Tp>
585*58b9f456SAndroid Build Coastguard Worker    _LIBCPP_CONSTEXPR const int numeric_limits<const _Tp>::digits;
586*58b9f456SAndroid Build Coastguard Workertemplate <class _Tp>
587*58b9f456SAndroid Build Coastguard Worker    _LIBCPP_CONSTEXPR const int numeric_limits<const _Tp>::digits10;
588*58b9f456SAndroid Build Coastguard Workertemplate <class _Tp>
589*58b9f456SAndroid Build Coastguard Worker    _LIBCPP_CONSTEXPR const int numeric_limits<const _Tp>::max_digits10;
590*58b9f456SAndroid Build Coastguard Workertemplate <class _Tp>
591*58b9f456SAndroid Build Coastguard Worker    _LIBCPP_CONSTEXPR const bool numeric_limits<const _Tp>::is_signed;
592*58b9f456SAndroid Build Coastguard Workertemplate <class _Tp>
593*58b9f456SAndroid Build Coastguard Worker    _LIBCPP_CONSTEXPR const bool numeric_limits<const _Tp>::is_integer;
594*58b9f456SAndroid Build Coastguard Workertemplate <class _Tp>
595*58b9f456SAndroid Build Coastguard Worker    _LIBCPP_CONSTEXPR const bool numeric_limits<const _Tp>::is_exact;
596*58b9f456SAndroid Build Coastguard Workertemplate <class _Tp>
597*58b9f456SAndroid Build Coastguard Worker    _LIBCPP_CONSTEXPR const int numeric_limits<const _Tp>::radix;
598*58b9f456SAndroid Build Coastguard Workertemplate <class _Tp>
599*58b9f456SAndroid Build Coastguard Worker    _LIBCPP_CONSTEXPR const int numeric_limits<const _Tp>::min_exponent;
600*58b9f456SAndroid Build Coastguard Workertemplate <class _Tp>
601*58b9f456SAndroid Build Coastguard Worker    _LIBCPP_CONSTEXPR const int numeric_limits<const _Tp>::min_exponent10;
602*58b9f456SAndroid Build Coastguard Workertemplate <class _Tp>
603*58b9f456SAndroid Build Coastguard Worker    _LIBCPP_CONSTEXPR const int numeric_limits<const _Tp>::max_exponent;
604*58b9f456SAndroid Build Coastguard Workertemplate <class _Tp>
605*58b9f456SAndroid Build Coastguard Worker    _LIBCPP_CONSTEXPR const int numeric_limits<const _Tp>::max_exponent10;
606*58b9f456SAndroid Build Coastguard Workertemplate <class _Tp>
607*58b9f456SAndroid Build Coastguard Worker    _LIBCPP_CONSTEXPR const bool numeric_limits<const _Tp>::has_infinity;
608*58b9f456SAndroid Build Coastguard Workertemplate <class _Tp>
609*58b9f456SAndroid Build Coastguard Worker    _LIBCPP_CONSTEXPR const bool numeric_limits<const _Tp>::has_quiet_NaN;
610*58b9f456SAndroid Build Coastguard Workertemplate <class _Tp>
611*58b9f456SAndroid Build Coastguard Worker    _LIBCPP_CONSTEXPR const bool numeric_limits<const _Tp>::has_signaling_NaN;
612*58b9f456SAndroid Build Coastguard Workertemplate <class _Tp>
613*58b9f456SAndroid Build Coastguard Worker    _LIBCPP_CONSTEXPR const float_denorm_style numeric_limits<const _Tp>::has_denorm;
614*58b9f456SAndroid Build Coastguard Workertemplate <class _Tp>
615*58b9f456SAndroid Build Coastguard Worker    _LIBCPP_CONSTEXPR const bool numeric_limits<const _Tp>::has_denorm_loss;
616*58b9f456SAndroid Build Coastguard Workertemplate <class _Tp>
617*58b9f456SAndroid Build Coastguard Worker    _LIBCPP_CONSTEXPR const bool numeric_limits<const _Tp>::is_iec559;
618*58b9f456SAndroid Build Coastguard Workertemplate <class _Tp>
619*58b9f456SAndroid Build Coastguard Worker    _LIBCPP_CONSTEXPR const bool numeric_limits<const _Tp>::is_bounded;
620*58b9f456SAndroid Build Coastguard Workertemplate <class _Tp>
621*58b9f456SAndroid Build Coastguard Worker    _LIBCPP_CONSTEXPR const bool numeric_limits<const _Tp>::is_modulo;
622*58b9f456SAndroid Build Coastguard Workertemplate <class _Tp>
623*58b9f456SAndroid Build Coastguard Worker    _LIBCPP_CONSTEXPR const bool numeric_limits<const _Tp>::traps;
624*58b9f456SAndroid Build Coastguard Workertemplate <class _Tp>
625*58b9f456SAndroid Build Coastguard Worker    _LIBCPP_CONSTEXPR const bool numeric_limits<const _Tp>::tinyness_before;
626*58b9f456SAndroid Build Coastguard Workertemplate <class _Tp>
627*58b9f456SAndroid Build Coastguard Worker    _LIBCPP_CONSTEXPR const float_round_style numeric_limits<const _Tp>::round_style;
628*58b9f456SAndroid Build Coastguard Worker
629*58b9f456SAndroid Build Coastguard Workertemplate <class _Tp>
630*58b9f456SAndroid Build Coastguard Workerclass _LIBCPP_TEMPLATE_VIS numeric_limits<volatile _Tp>
631*58b9f456SAndroid Build Coastguard Worker    : private numeric_limits<_Tp>
632*58b9f456SAndroid Build Coastguard Worker{
633*58b9f456SAndroid Build Coastguard Worker    typedef numeric_limits<_Tp> __base;
634*58b9f456SAndroid Build Coastguard Worker    typedef _Tp type;
635*58b9f456SAndroid Build Coastguard Workerpublic:
636*58b9f456SAndroid Build Coastguard Worker    static _LIBCPP_CONSTEXPR const bool is_specialized = __base::is_specialized;
637*58b9f456SAndroid Build Coastguard Worker    _LIBCPP_INLINE_VISIBILITY static _LIBCPP_CONSTEXPR type min() _NOEXCEPT {return __base::min();}
638*58b9f456SAndroid Build Coastguard Worker    _LIBCPP_INLINE_VISIBILITY static _LIBCPP_CONSTEXPR type max() _NOEXCEPT {return __base::max();}
639*58b9f456SAndroid Build Coastguard Worker    _LIBCPP_INLINE_VISIBILITY static _LIBCPP_CONSTEXPR type lowest() _NOEXCEPT {return __base::lowest();}
640*58b9f456SAndroid Build Coastguard Worker
641*58b9f456SAndroid Build Coastguard Worker    static _LIBCPP_CONSTEXPR const int  digits = __base::digits;
642*58b9f456SAndroid Build Coastguard Worker    static _LIBCPP_CONSTEXPR const int  digits10 = __base::digits10;
643*58b9f456SAndroid Build Coastguard Worker    static _LIBCPP_CONSTEXPR const int  max_digits10 = __base::max_digits10;
644*58b9f456SAndroid Build Coastguard Worker    static _LIBCPP_CONSTEXPR const bool is_signed = __base::is_signed;
645*58b9f456SAndroid Build Coastguard Worker    static _LIBCPP_CONSTEXPR const bool is_integer = __base::is_integer;
646*58b9f456SAndroid Build Coastguard Worker    static _LIBCPP_CONSTEXPR const bool is_exact = __base::is_exact;
647*58b9f456SAndroid Build Coastguard Worker    static _LIBCPP_CONSTEXPR const int  radix = __base::radix;
648*58b9f456SAndroid Build Coastguard Worker    _LIBCPP_INLINE_VISIBILITY static _LIBCPP_CONSTEXPR type epsilon() _NOEXCEPT {return __base::epsilon();}
649*58b9f456SAndroid Build Coastguard Worker    _LIBCPP_INLINE_VISIBILITY static _LIBCPP_CONSTEXPR type round_error() _NOEXCEPT {return __base::round_error();}
650*58b9f456SAndroid Build Coastguard Worker
651*58b9f456SAndroid Build Coastguard Worker    static _LIBCPP_CONSTEXPR const int  min_exponent = __base::min_exponent;
652*58b9f456SAndroid Build Coastguard Worker    static _LIBCPP_CONSTEXPR const int  min_exponent10 = __base::min_exponent10;
653*58b9f456SAndroid Build Coastguard Worker    static _LIBCPP_CONSTEXPR const int  max_exponent = __base::max_exponent;
654*58b9f456SAndroid Build Coastguard Worker    static _LIBCPP_CONSTEXPR const int  max_exponent10 = __base::max_exponent10;
655*58b9f456SAndroid Build Coastguard Worker
656*58b9f456SAndroid Build Coastguard Worker    static _LIBCPP_CONSTEXPR const bool has_infinity = __base::has_infinity;
657*58b9f456SAndroid Build Coastguard Worker    static _LIBCPP_CONSTEXPR const bool has_quiet_NaN = __base::has_quiet_NaN;
658*58b9f456SAndroid Build Coastguard Worker    static _LIBCPP_CONSTEXPR const bool has_signaling_NaN = __base::has_signaling_NaN;
659*58b9f456SAndroid Build Coastguard Worker    static _LIBCPP_CONSTEXPR const float_denorm_style has_denorm = __base::has_denorm;
660*58b9f456SAndroid Build Coastguard Worker    static _LIBCPP_CONSTEXPR const bool has_denorm_loss = __base::has_denorm_loss;
661*58b9f456SAndroid Build Coastguard Worker    _LIBCPP_INLINE_VISIBILITY static _LIBCPP_CONSTEXPR type infinity() _NOEXCEPT {return __base::infinity();}
662*58b9f456SAndroid Build Coastguard Worker    _LIBCPP_INLINE_VISIBILITY static _LIBCPP_CONSTEXPR type quiet_NaN() _NOEXCEPT {return __base::quiet_NaN();}
663*58b9f456SAndroid Build Coastguard Worker    _LIBCPP_INLINE_VISIBILITY static _LIBCPP_CONSTEXPR type signaling_NaN() _NOEXCEPT {return __base::signaling_NaN();}
664*58b9f456SAndroid Build Coastguard Worker    _LIBCPP_INLINE_VISIBILITY static _LIBCPP_CONSTEXPR type denorm_min() _NOEXCEPT {return __base::denorm_min();}
665*58b9f456SAndroid Build Coastguard Worker
666*58b9f456SAndroid Build Coastguard Worker    static _LIBCPP_CONSTEXPR const bool is_iec559 = __base::is_iec559;
667*58b9f456SAndroid Build Coastguard Worker    static _LIBCPP_CONSTEXPR const bool is_bounded = __base::is_bounded;
668*58b9f456SAndroid Build Coastguard Worker    static _LIBCPP_CONSTEXPR const bool is_modulo = __base::is_modulo;
669*58b9f456SAndroid Build Coastguard Worker
670*58b9f456SAndroid Build Coastguard Worker    static _LIBCPP_CONSTEXPR const bool traps = __base::traps;
671*58b9f456SAndroid Build Coastguard Worker    static _LIBCPP_CONSTEXPR const bool tinyness_before = __base::tinyness_before;
672*58b9f456SAndroid Build Coastguard Worker    static _LIBCPP_CONSTEXPR const float_round_style round_style = __base::round_style;
673*58b9f456SAndroid Build Coastguard Worker};
674*58b9f456SAndroid Build Coastguard Worker
675*58b9f456SAndroid Build Coastguard Workertemplate <class _Tp>
676*58b9f456SAndroid Build Coastguard Worker    _LIBCPP_CONSTEXPR const bool numeric_limits<volatile _Tp>::is_specialized;
677*58b9f456SAndroid Build Coastguard Workertemplate <class _Tp>
678*58b9f456SAndroid Build Coastguard Worker    _LIBCPP_CONSTEXPR const int numeric_limits<volatile _Tp>::digits;
679*58b9f456SAndroid Build Coastguard Workertemplate <class _Tp>
680*58b9f456SAndroid Build Coastguard Worker    _LIBCPP_CONSTEXPR const int numeric_limits<volatile _Tp>::digits10;
681*58b9f456SAndroid Build Coastguard Workertemplate <class _Tp>
682*58b9f456SAndroid Build Coastguard Worker    _LIBCPP_CONSTEXPR const int numeric_limits<volatile _Tp>::max_digits10;
683*58b9f456SAndroid Build Coastguard Workertemplate <class _Tp>
684*58b9f456SAndroid Build Coastguard Worker    _LIBCPP_CONSTEXPR const bool numeric_limits<volatile _Tp>::is_signed;
685*58b9f456SAndroid Build Coastguard Workertemplate <class _Tp>
686*58b9f456SAndroid Build Coastguard Worker    _LIBCPP_CONSTEXPR const bool numeric_limits<volatile _Tp>::is_integer;
687*58b9f456SAndroid Build Coastguard Workertemplate <class _Tp>
688*58b9f456SAndroid Build Coastguard Worker    _LIBCPP_CONSTEXPR const bool numeric_limits<volatile _Tp>::is_exact;
689*58b9f456SAndroid Build Coastguard Workertemplate <class _Tp>
690*58b9f456SAndroid Build Coastguard Worker    _LIBCPP_CONSTEXPR const int numeric_limits<volatile _Tp>::radix;
691*58b9f456SAndroid Build Coastguard Workertemplate <class _Tp>
692*58b9f456SAndroid Build Coastguard Worker    _LIBCPP_CONSTEXPR const int numeric_limits<volatile _Tp>::min_exponent;
693*58b9f456SAndroid Build Coastguard Workertemplate <class _Tp>
694*58b9f456SAndroid Build Coastguard Worker    _LIBCPP_CONSTEXPR const int numeric_limits<volatile _Tp>::min_exponent10;
695*58b9f456SAndroid Build Coastguard Workertemplate <class _Tp>
696*58b9f456SAndroid Build Coastguard Worker    _LIBCPP_CONSTEXPR const int numeric_limits<volatile _Tp>::max_exponent;
697*58b9f456SAndroid Build Coastguard Workertemplate <class _Tp>
698*58b9f456SAndroid Build Coastguard Worker    _LIBCPP_CONSTEXPR const int numeric_limits<volatile _Tp>::max_exponent10;
699*58b9f456SAndroid Build Coastguard Workertemplate <class _Tp>
700*58b9f456SAndroid Build Coastguard Worker    _LIBCPP_CONSTEXPR const bool numeric_limits<volatile _Tp>::has_infinity;
701*58b9f456SAndroid Build Coastguard Workertemplate <class _Tp>
702*58b9f456SAndroid Build Coastguard Worker    _LIBCPP_CONSTEXPR const bool numeric_limits<volatile _Tp>::has_quiet_NaN;
703*58b9f456SAndroid Build Coastguard Workertemplate <class _Tp>
704*58b9f456SAndroid Build Coastguard Worker    _LIBCPP_CONSTEXPR const bool numeric_limits<volatile _Tp>::has_signaling_NaN;
705*58b9f456SAndroid Build Coastguard Workertemplate <class _Tp>
706*58b9f456SAndroid Build Coastguard Worker    _LIBCPP_CONSTEXPR const float_denorm_style numeric_limits<volatile _Tp>::has_denorm;
707*58b9f456SAndroid Build Coastguard Workertemplate <class _Tp>
708*58b9f456SAndroid Build Coastguard Worker    _LIBCPP_CONSTEXPR const bool numeric_limits<volatile _Tp>::has_denorm_loss;
709*58b9f456SAndroid Build Coastguard Workertemplate <class _Tp>
710*58b9f456SAndroid Build Coastguard Worker    _LIBCPP_CONSTEXPR const bool numeric_limits<volatile _Tp>::is_iec559;
711*58b9f456SAndroid Build Coastguard Workertemplate <class _Tp>
712*58b9f456SAndroid Build Coastguard Worker    _LIBCPP_CONSTEXPR const bool numeric_limits<volatile _Tp>::is_bounded;
713*58b9f456SAndroid Build Coastguard Workertemplate <class _Tp>
714*58b9f456SAndroid Build Coastguard Worker    _LIBCPP_CONSTEXPR const bool numeric_limits<volatile _Tp>::is_modulo;
715*58b9f456SAndroid Build Coastguard Workertemplate <class _Tp>
716*58b9f456SAndroid Build Coastguard Worker    _LIBCPP_CONSTEXPR const bool numeric_limits<volatile _Tp>::traps;
717*58b9f456SAndroid Build Coastguard Workertemplate <class _Tp>
718*58b9f456SAndroid Build Coastguard Worker    _LIBCPP_CONSTEXPR const bool numeric_limits<volatile _Tp>::tinyness_before;
719*58b9f456SAndroid Build Coastguard Workertemplate <class _Tp>
720*58b9f456SAndroid Build Coastguard Worker    _LIBCPP_CONSTEXPR const float_round_style numeric_limits<volatile _Tp>::round_style;
721*58b9f456SAndroid Build Coastguard Worker
722*58b9f456SAndroid Build Coastguard Workertemplate <class _Tp>
723*58b9f456SAndroid Build Coastguard Workerclass _LIBCPP_TEMPLATE_VIS numeric_limits<const volatile _Tp>
724*58b9f456SAndroid Build Coastguard Worker    : private numeric_limits<_Tp>
725*58b9f456SAndroid Build Coastguard Worker{
726*58b9f456SAndroid Build Coastguard Worker    typedef numeric_limits<_Tp> __base;
727*58b9f456SAndroid Build Coastguard Worker    typedef _Tp type;
728*58b9f456SAndroid Build Coastguard Workerpublic:
729*58b9f456SAndroid Build Coastguard Worker    static _LIBCPP_CONSTEXPR const bool is_specialized = __base::is_specialized;
730*58b9f456SAndroid Build Coastguard Worker    _LIBCPP_INLINE_VISIBILITY static _LIBCPP_CONSTEXPR type min() _NOEXCEPT {return __base::min();}
731*58b9f456SAndroid Build Coastguard Worker    _LIBCPP_INLINE_VISIBILITY static _LIBCPP_CONSTEXPR type max() _NOEXCEPT {return __base::max();}
732*58b9f456SAndroid Build Coastguard Worker    _LIBCPP_INLINE_VISIBILITY static _LIBCPP_CONSTEXPR type lowest() _NOEXCEPT {return __base::lowest();}
733*58b9f456SAndroid Build Coastguard Worker
734*58b9f456SAndroid Build Coastguard Worker    static _LIBCPP_CONSTEXPR const int  digits = __base::digits;
735*58b9f456SAndroid Build Coastguard Worker    static _LIBCPP_CONSTEXPR const int  digits10 = __base::digits10;
736*58b9f456SAndroid Build Coastguard Worker    static _LIBCPP_CONSTEXPR const int  max_digits10 = __base::max_digits10;
737*58b9f456SAndroid Build Coastguard Worker    static _LIBCPP_CONSTEXPR const bool is_signed = __base::is_signed;
738*58b9f456SAndroid Build Coastguard Worker    static _LIBCPP_CONSTEXPR const bool is_integer = __base::is_integer;
739*58b9f456SAndroid Build Coastguard Worker    static _LIBCPP_CONSTEXPR const bool is_exact = __base::is_exact;
740*58b9f456SAndroid Build Coastguard Worker    static _LIBCPP_CONSTEXPR const int  radix = __base::radix;
741*58b9f456SAndroid Build Coastguard Worker    _LIBCPP_INLINE_VISIBILITY static _LIBCPP_CONSTEXPR type epsilon() _NOEXCEPT {return __base::epsilon();}
742*58b9f456SAndroid Build Coastguard Worker    _LIBCPP_INLINE_VISIBILITY static _LIBCPP_CONSTEXPR type round_error() _NOEXCEPT {return __base::round_error();}
743*58b9f456SAndroid Build Coastguard Worker
744*58b9f456SAndroid Build Coastguard Worker    static _LIBCPP_CONSTEXPR const int  min_exponent = __base::min_exponent;
745*58b9f456SAndroid Build Coastguard Worker    static _LIBCPP_CONSTEXPR const int  min_exponent10 = __base::min_exponent10;
746*58b9f456SAndroid Build Coastguard Worker    static _LIBCPP_CONSTEXPR const int  max_exponent = __base::max_exponent;
747*58b9f456SAndroid Build Coastguard Worker    static _LIBCPP_CONSTEXPR const int  max_exponent10 = __base::max_exponent10;
748*58b9f456SAndroid Build Coastguard Worker
749*58b9f456SAndroid Build Coastguard Worker    static _LIBCPP_CONSTEXPR const bool has_infinity = __base::has_infinity;
750*58b9f456SAndroid Build Coastguard Worker    static _LIBCPP_CONSTEXPR const bool has_quiet_NaN = __base::has_quiet_NaN;
751*58b9f456SAndroid Build Coastguard Worker    static _LIBCPP_CONSTEXPR const bool has_signaling_NaN = __base::has_signaling_NaN;
752*58b9f456SAndroid Build Coastguard Worker    static _LIBCPP_CONSTEXPR const float_denorm_style has_denorm = __base::has_denorm;
753*58b9f456SAndroid Build Coastguard Worker    static _LIBCPP_CONSTEXPR const bool has_denorm_loss = __base::has_denorm_loss;
754*58b9f456SAndroid Build Coastguard Worker    _LIBCPP_INLINE_VISIBILITY static _LIBCPP_CONSTEXPR type infinity() _NOEXCEPT {return __base::infinity();}
755*58b9f456SAndroid Build Coastguard Worker    _LIBCPP_INLINE_VISIBILITY static _LIBCPP_CONSTEXPR type quiet_NaN() _NOEXCEPT {return __base::quiet_NaN();}
756*58b9f456SAndroid Build Coastguard Worker    _LIBCPP_INLINE_VISIBILITY static _LIBCPP_CONSTEXPR type signaling_NaN() _NOEXCEPT {return __base::signaling_NaN();}
757*58b9f456SAndroid Build Coastguard Worker    _LIBCPP_INLINE_VISIBILITY static _LIBCPP_CONSTEXPR type denorm_min() _NOEXCEPT {return __base::denorm_min();}
758*58b9f456SAndroid Build Coastguard Worker
759*58b9f456SAndroid Build Coastguard Worker    static _LIBCPP_CONSTEXPR const bool is_iec559 = __base::is_iec559;
760*58b9f456SAndroid Build Coastguard Worker    static _LIBCPP_CONSTEXPR const bool is_bounded = __base::is_bounded;
761*58b9f456SAndroid Build Coastguard Worker    static _LIBCPP_CONSTEXPR const bool is_modulo = __base::is_modulo;
762*58b9f456SAndroid Build Coastguard Worker
763*58b9f456SAndroid Build Coastguard Worker    static _LIBCPP_CONSTEXPR const bool traps = __base::traps;
764*58b9f456SAndroid Build Coastguard Worker    static _LIBCPP_CONSTEXPR const bool tinyness_before = __base::tinyness_before;
765*58b9f456SAndroid Build Coastguard Worker    static _LIBCPP_CONSTEXPR const float_round_style round_style = __base::round_style;
766*58b9f456SAndroid Build Coastguard Worker};
767*58b9f456SAndroid Build Coastguard Worker
768*58b9f456SAndroid Build Coastguard Workertemplate <class _Tp>
769*58b9f456SAndroid Build Coastguard Worker    _LIBCPP_CONSTEXPR const bool numeric_limits<const volatile _Tp>::is_specialized;
770*58b9f456SAndroid Build Coastguard Workertemplate <class _Tp>
771*58b9f456SAndroid Build Coastguard Worker    _LIBCPP_CONSTEXPR const int numeric_limits<const volatile _Tp>::digits;
772*58b9f456SAndroid Build Coastguard Workertemplate <class _Tp>
773*58b9f456SAndroid Build Coastguard Worker    _LIBCPP_CONSTEXPR const int numeric_limits<const volatile _Tp>::digits10;
774*58b9f456SAndroid Build Coastguard Workertemplate <class _Tp>
775*58b9f456SAndroid Build Coastguard Worker    _LIBCPP_CONSTEXPR const int numeric_limits<const volatile _Tp>::max_digits10;
776*58b9f456SAndroid Build Coastguard Workertemplate <class _Tp>
777*58b9f456SAndroid Build Coastguard Worker    _LIBCPP_CONSTEXPR const bool numeric_limits<const volatile _Tp>::is_signed;
778*58b9f456SAndroid Build Coastguard Workertemplate <class _Tp>
779*58b9f456SAndroid Build Coastguard Worker    _LIBCPP_CONSTEXPR const bool numeric_limits<const volatile _Tp>::is_integer;
780*58b9f456SAndroid Build Coastguard Workertemplate <class _Tp>
781*58b9f456SAndroid Build Coastguard Worker    _LIBCPP_CONSTEXPR const bool numeric_limits<const volatile _Tp>::is_exact;
782*58b9f456SAndroid Build Coastguard Workertemplate <class _Tp>
783*58b9f456SAndroid Build Coastguard Worker    _LIBCPP_CONSTEXPR const int numeric_limits<const volatile _Tp>::radix;
784*58b9f456SAndroid Build Coastguard Workertemplate <class _Tp>
785*58b9f456SAndroid Build Coastguard Worker    _LIBCPP_CONSTEXPR const int numeric_limits<const volatile _Tp>::min_exponent;
786*58b9f456SAndroid Build Coastguard Workertemplate <class _Tp>
787*58b9f456SAndroid Build Coastguard Worker    _LIBCPP_CONSTEXPR const int numeric_limits<const volatile _Tp>::min_exponent10;
788*58b9f456SAndroid Build Coastguard Workertemplate <class _Tp>
789*58b9f456SAndroid Build Coastguard Worker    _LIBCPP_CONSTEXPR const int numeric_limits<const volatile _Tp>::max_exponent;
790*58b9f456SAndroid Build Coastguard Workertemplate <class _Tp>
791*58b9f456SAndroid Build Coastguard Worker    _LIBCPP_CONSTEXPR const int numeric_limits<const volatile _Tp>::max_exponent10;
792*58b9f456SAndroid Build Coastguard Workertemplate <class _Tp>
793*58b9f456SAndroid Build Coastguard Worker    _LIBCPP_CONSTEXPR const bool numeric_limits<const volatile _Tp>::has_infinity;
794*58b9f456SAndroid Build Coastguard Workertemplate <class _Tp>
795*58b9f456SAndroid Build Coastguard Worker    _LIBCPP_CONSTEXPR const bool numeric_limits<const volatile _Tp>::has_quiet_NaN;
796*58b9f456SAndroid Build Coastguard Workertemplate <class _Tp>
797*58b9f456SAndroid Build Coastguard Worker    _LIBCPP_CONSTEXPR const bool numeric_limits<const volatile _Tp>::has_signaling_NaN;
798*58b9f456SAndroid Build Coastguard Workertemplate <class _Tp>
799*58b9f456SAndroid Build Coastguard Worker    _LIBCPP_CONSTEXPR const float_denorm_style numeric_limits<const volatile _Tp>::has_denorm;
800*58b9f456SAndroid Build Coastguard Workertemplate <class _Tp>
801*58b9f456SAndroid Build Coastguard Worker    _LIBCPP_CONSTEXPR const bool numeric_limits<const volatile _Tp>::has_denorm_loss;
802*58b9f456SAndroid Build Coastguard Workertemplate <class _Tp>
803*58b9f456SAndroid Build Coastguard Worker    _LIBCPP_CONSTEXPR const bool numeric_limits<const volatile _Tp>::is_iec559;
804*58b9f456SAndroid Build Coastguard Workertemplate <class _Tp>
805*58b9f456SAndroid Build Coastguard Worker    _LIBCPP_CONSTEXPR const bool numeric_limits<const volatile _Tp>::is_bounded;
806*58b9f456SAndroid Build Coastguard Workertemplate <class _Tp>
807*58b9f456SAndroid Build Coastguard Worker    _LIBCPP_CONSTEXPR const bool numeric_limits<const volatile _Tp>::is_modulo;
808*58b9f456SAndroid Build Coastguard Workertemplate <class _Tp>
809*58b9f456SAndroid Build Coastguard Worker    _LIBCPP_CONSTEXPR const bool numeric_limits<const volatile _Tp>::traps;
810*58b9f456SAndroid Build Coastguard Workertemplate <class _Tp>
811*58b9f456SAndroid Build Coastguard Worker    _LIBCPP_CONSTEXPR const bool numeric_limits<const volatile _Tp>::tinyness_before;
812*58b9f456SAndroid Build Coastguard Workertemplate <class _Tp>
813*58b9f456SAndroid Build Coastguard Worker    _LIBCPP_CONSTEXPR const float_round_style numeric_limits<const volatile _Tp>::round_style;
814*58b9f456SAndroid Build Coastguard Worker
815*58b9f456SAndroid Build Coastguard Worker_LIBCPP_END_NAMESPACE_STD
816*58b9f456SAndroid Build Coastguard Worker
817*58b9f456SAndroid Build Coastguard Worker_LIBCPP_POP_MACROS
818*58b9f456SAndroid Build Coastguard Worker
819*58b9f456SAndroid Build Coastguard Worker#endif  // _LIBCPP_LIMITS
820