Coverage Report

Created: 2020-02-25 14:32

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