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