Project

General

Profile

Statistics
| Revision:

root / lab4 / .minix-src / include / c++ / limits @ 14

History | View | Annotate | Download (39.5 KB)

1
// -*- C++ -*-
2
//===---------------------------- limits ----------------------------------===//
3
//
4
//                     The LLVM Compiler Infrastructure
5
//
6
// This file is dual licensed under the MIT and the University of Illinois Open
7
// Source Licenses. See LICENSE.TXT for details.
8
//
9
//===----------------------------------------------------------------------===//
10

    
11
#ifndef _LIBCPP_LIMITS
12
#define _LIBCPP_LIMITS
13

    
14
/*
15
    limits synopsis
16

    
17
namespace std
18
{
19

    
20
template<class T>
21
class numeric_limits
22
{
23
public:
24
    static constexpr bool is_specialized = false;
25
    static constexpr T min() noexcept;
26
    static constexpr T max() noexcept;
27
    static constexpr T lowest() noexcept;
28

    
29
    static constexpr int  digits = 0;
30
    static constexpr int  digits10 = 0;
31
    static constexpr int  max_digits10 = 0;
32
    static constexpr bool is_signed = false;
33
    static constexpr bool is_integer = false;
34
    static constexpr bool is_exact = false;
35
    static constexpr int  radix = 0;
36
    static constexpr T epsilon() noexcept;
37
    static constexpr T round_error() noexcept;
38

    
39
    static constexpr int  min_exponent = 0;
40
    static constexpr int  min_exponent10 = 0;
41
    static constexpr int  max_exponent = 0;
42
    static constexpr int  max_exponent10 = 0;
43

    
44
    static constexpr bool has_infinity = false;
45
    static constexpr bool has_quiet_NaN = false;
46
    static constexpr bool has_signaling_NaN = false;
47
    static constexpr float_denorm_style has_denorm = denorm_absent;
48
    static constexpr bool has_denorm_loss = false;
49
    static constexpr T infinity() noexcept;
50
    static constexpr T quiet_NaN() noexcept;
51
    static constexpr T signaling_NaN() noexcept;
52
    static constexpr T denorm_min() noexcept;
53

    
54
    static constexpr bool is_iec559 = false;
55
    static constexpr bool is_bounded = false;
56
    static constexpr bool is_modulo = false;
57

    
58
    static constexpr bool traps = false;
59
    static constexpr bool tinyness_before = false;
60
    static constexpr float_round_style round_style = round_toward_zero;
61
};
62

    
63
enum float_round_style
64
{
65
    round_indeterminate       = -1,
66
    round_toward_zero         =  0,
67
    round_to_nearest          =  1,
68
    round_toward_infinity     =  2,
69
    round_toward_neg_infinity =  3
70
};
71

    
72
enum float_denorm_style
73
{
74
    denorm_indeterminate = -1,
75
    denorm_absent = 0,
76
    denorm_present = 1
77
};
78

    
79
template<> class numeric_limits<cv bool>;
80

    
81
template<> class numeric_limits<cv char>;
82
template<> class numeric_limits<cv signed char>;
83
template<> class numeric_limits<cv unsigned char>;
84
template<> class numeric_limits<cv wchar_t>;
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

    
105
#if !defined(_LIBCPP_HAS_NO_PRAGMA_SYSTEM_HEADER)
106
#pragma GCC system_header
107
#endif
108

    
109
#include <__config>
110
#include <type_traits>
111

    
112
#include <__undef_min_max>
113

    
114
#if defined(_LIBCPP_MSVCRT)
115
#include "support/win32/limits_win32.h"
116
#endif // _LIBCPP_MSVCRT
117

    
118
#if defined(__IBMCPP__)
119
#include "support/ibm/limits.h"
120
#endif // __IBMCPP__
121

    
122
_LIBCPP_BEGIN_NAMESPACE_STD
123

    
124
enum float_round_style
125
{
126
    round_indeterminate       = -1,
127
    round_toward_zero         =  0,
128
    round_to_nearest          =  1,
129
    round_toward_infinity     =  2,
130
    round_toward_neg_infinity =  3
131
};
132

    
133
enum float_denorm_style
134
{
135
    denorm_indeterminate = -1,
136
    denorm_absent = 0,
137
    denorm_present = 1
138
};
139

    
140
template <class _Tp, bool = is_arithmetic<_Tp>::value>
141
class __libcpp_numeric_limits
142
{
143
protected:
144
    typedef _Tp type;
145

    
146
    static _LIBCPP_CONSTEXPR const  bool is_specialized = false;
147
    _LIBCPP_INLINE_VISIBILITY static _LIBCPP_CONSTEXPR type min() _NOEXCEPT {return type();}
148
    _LIBCPP_INLINE_VISIBILITY static _LIBCPP_CONSTEXPR type max() _NOEXCEPT {return type();}
149
    _LIBCPP_INLINE_VISIBILITY static _LIBCPP_CONSTEXPR type lowest() _NOEXCEPT {return type();}
150

    
151
    static _LIBCPP_CONSTEXPR const int  digits = 0;
152
    static _LIBCPP_CONSTEXPR const int  digits10 = 0;
153
    static _LIBCPP_CONSTEXPR const int  max_digits10 = 0;
154
    static _LIBCPP_CONSTEXPR const bool is_signed = false;
155
    static _LIBCPP_CONSTEXPR const bool is_integer = false;
156
    static _LIBCPP_CONSTEXPR const bool is_exact = false;
157
    static _LIBCPP_CONSTEXPR const int  radix = 0;
158
    _LIBCPP_INLINE_VISIBILITY static _LIBCPP_CONSTEXPR type epsilon() _NOEXCEPT {return type();}
159
    _LIBCPP_INLINE_VISIBILITY static _LIBCPP_CONSTEXPR type round_error() _NOEXCEPT {return type();}
160

    
161
    static _LIBCPP_CONSTEXPR const int  min_exponent = 0;
162
    static _LIBCPP_CONSTEXPR const int  min_exponent10 = 0;
163
    static _LIBCPP_CONSTEXPR const int  max_exponent = 0;
164
    static _LIBCPP_CONSTEXPR const int  max_exponent10 = 0;
165

    
166
    static _LIBCPP_CONSTEXPR const bool has_infinity = false;
167
    static _LIBCPP_CONSTEXPR const bool has_quiet_NaN = false;
168
    static _LIBCPP_CONSTEXPR const bool has_signaling_NaN = false;
169
    static _LIBCPP_CONSTEXPR const float_denorm_style has_denorm = denorm_absent;
170
    static _LIBCPP_CONSTEXPR const bool has_denorm_loss = false;
171
    _LIBCPP_INLINE_VISIBILITY static _LIBCPP_CONSTEXPR type infinity() _NOEXCEPT {return type();}
172
    _LIBCPP_INLINE_VISIBILITY static _LIBCPP_CONSTEXPR type quiet_NaN() _NOEXCEPT {return type();}
173
    _LIBCPP_INLINE_VISIBILITY static _LIBCPP_CONSTEXPR type signaling_NaN() _NOEXCEPT {return type();}
174
    _LIBCPP_INLINE_VISIBILITY static _LIBCPP_CONSTEXPR type denorm_min() _NOEXCEPT {return type();}
175

    
176
    static _LIBCPP_CONSTEXPR const bool is_iec559 = false;
177
    static _LIBCPP_CONSTEXPR const bool is_bounded = false;
178
    static _LIBCPP_CONSTEXPR const bool is_modulo = false;
179

    
180
    static _LIBCPP_CONSTEXPR const bool traps = false;
181
    static _LIBCPP_CONSTEXPR const bool tinyness_before = false;
182
    static _LIBCPP_CONSTEXPR const float_round_style round_style = round_toward_zero;
183
};
184

    
185
template <class _Tp, int digits, bool is_signed>
186
struct __libcpp_compute_min
187
{
188
    static _LIBCPP_CONSTEXPR const _Tp value = _Tp(_Tp(1) << digits);
189
};
190

    
191
template <class _Tp, int digits>
192
struct __libcpp_compute_min<_Tp, digits, false>
193
{
194
    static _LIBCPP_CONSTEXPR const _Tp value = _Tp(0);
195
};
196

    
197
template <class _Tp>
198
class __libcpp_numeric_limits<_Tp, true>
199
{
200
protected:
201
    typedef _Tp type;
202

    
203
    static _LIBCPP_CONSTEXPR const bool is_specialized = true;
204

    
205
    static _LIBCPP_CONSTEXPR const bool is_signed = type(-1) < type(0);
206
    static _LIBCPP_CONSTEXPR const int  digits = static_cast<int>(sizeof(type) * __CHAR_BIT__ - is_signed);
207
    static _LIBCPP_CONSTEXPR const int  digits10 = digits * 3 / 10;
208
    static _LIBCPP_CONSTEXPR const int  max_digits10 = 0;
209
    static _LIBCPP_CONSTEXPR const type __min = __libcpp_compute_min<type, digits, is_signed>::value;
210
    static _LIBCPP_CONSTEXPR const type __max = is_signed ? type(type(~0) ^ __min) : type(~0);
211
    _LIBCPP_INLINE_VISIBILITY static _LIBCPP_CONSTEXPR type min() _NOEXCEPT {return __min;}
212
    _LIBCPP_INLINE_VISIBILITY static _LIBCPP_CONSTEXPR type max() _NOEXCEPT {return __max;}
213
    _LIBCPP_INLINE_VISIBILITY static _LIBCPP_CONSTEXPR type lowest() _NOEXCEPT {return min();}
214

    
215
    static _LIBCPP_CONSTEXPR const bool is_integer = true;
216
    static _LIBCPP_CONSTEXPR const bool is_exact = true;
217
    static _LIBCPP_CONSTEXPR const int  radix = 2;
218
    _LIBCPP_INLINE_VISIBILITY static _LIBCPP_CONSTEXPR type epsilon() _NOEXCEPT {return type(0);}
219
    _LIBCPP_INLINE_VISIBILITY static _LIBCPP_CONSTEXPR type round_error() _NOEXCEPT {return type(0);}
220

    
221
    static _LIBCPP_CONSTEXPR const int  min_exponent = 0;
222
    static _LIBCPP_CONSTEXPR const int  min_exponent10 = 0;
223
    static _LIBCPP_CONSTEXPR const int  max_exponent = 0;
224
    static _LIBCPP_CONSTEXPR const int  max_exponent10 = 0;
225

    
226
    static _LIBCPP_CONSTEXPR const bool has_infinity = false;
227
    static _LIBCPP_CONSTEXPR const bool has_quiet_NaN = false;
228
    static _LIBCPP_CONSTEXPR const bool has_signaling_NaN = false;
229
    static _LIBCPP_CONSTEXPR const float_denorm_style has_denorm = denorm_absent;
230
    static _LIBCPP_CONSTEXPR const bool has_denorm_loss = false;
231
    _LIBCPP_INLINE_VISIBILITY static _LIBCPP_CONSTEXPR type infinity() _NOEXCEPT {return type(0);}
232
    _LIBCPP_INLINE_VISIBILITY static _LIBCPP_CONSTEXPR type quiet_NaN() _NOEXCEPT {return type(0);}
233
    _LIBCPP_INLINE_VISIBILITY static _LIBCPP_CONSTEXPR type signaling_NaN() _NOEXCEPT {return type(0);}
234
    _LIBCPP_INLINE_VISIBILITY static _LIBCPP_CONSTEXPR type denorm_min() _NOEXCEPT {return type(0);}
235

    
236
    static _LIBCPP_CONSTEXPR const bool is_iec559 = false;
237
    static _LIBCPP_CONSTEXPR const bool is_bounded = true;
238
    static _LIBCPP_CONSTEXPR const bool is_modulo = !_VSTD::is_signed<_Tp>::value;
239

    
240
#if defined(__i386__) || defined(__x86_64__) || defined(__pnacl__)
241
    static _LIBCPP_CONSTEXPR const bool traps = true;
242
#else
243
    static _LIBCPP_CONSTEXPR const bool traps = false;
244
#endif
245
    static _LIBCPP_CONSTEXPR const bool tinyness_before = false;
246
    static _LIBCPP_CONSTEXPR const float_round_style round_style = round_toward_zero;
247
};
248

    
249
template <>
250
class __libcpp_numeric_limits<bool, true>
251
{
252
protected:
253
    typedef bool type;
254

    
255
    static _LIBCPP_CONSTEXPR const bool is_specialized = true;
256

    
257
    static _LIBCPP_CONSTEXPR const bool is_signed = false;
258
    static _LIBCPP_CONSTEXPR const int  digits = 1;
259
    static _LIBCPP_CONSTEXPR const int  digits10 = 0;
260
    static _LIBCPP_CONSTEXPR const int  max_digits10 = 0;
261
    static _LIBCPP_CONSTEXPR const type __min = false;
262
    static _LIBCPP_CONSTEXPR const type __max = true;
263
    _LIBCPP_INLINE_VISIBILITY static _LIBCPP_CONSTEXPR type min() _NOEXCEPT {return __min;}
264
    _LIBCPP_INLINE_VISIBILITY static _LIBCPP_CONSTEXPR type max() _NOEXCEPT {return __max;}
265
    _LIBCPP_INLINE_VISIBILITY static _LIBCPP_CONSTEXPR type lowest() _NOEXCEPT {return min();}
266

    
267
    static _LIBCPP_CONSTEXPR const bool is_integer = true;
268
    static _LIBCPP_CONSTEXPR const bool is_exact = true;
269
    static _LIBCPP_CONSTEXPR const int  radix = 2;
270
    _LIBCPP_INLINE_VISIBILITY static _LIBCPP_CONSTEXPR type epsilon() _NOEXCEPT {return type(0);}
271
    _LIBCPP_INLINE_VISIBILITY static _LIBCPP_CONSTEXPR type round_error() _NOEXCEPT {return type(0);}
272

    
273
    static _LIBCPP_CONSTEXPR const int  min_exponent = 0;
274
    static _LIBCPP_CONSTEXPR const int  min_exponent10 = 0;
275
    static _LIBCPP_CONSTEXPR const int  max_exponent = 0;
276
    static _LIBCPP_CONSTEXPR const int  max_exponent10 = 0;
277

    
278
    static _LIBCPP_CONSTEXPR const bool has_infinity = false;
279
    static _LIBCPP_CONSTEXPR const bool has_quiet_NaN = false;
280
    static _LIBCPP_CONSTEXPR const bool has_signaling_NaN = false;
281
    static _LIBCPP_CONSTEXPR const float_denorm_style has_denorm = denorm_absent;
282
    static _LIBCPP_CONSTEXPR const bool has_denorm_loss = false;
283
    _LIBCPP_INLINE_VISIBILITY static _LIBCPP_CONSTEXPR type infinity() _NOEXCEPT {return type(0);}
284
    _LIBCPP_INLINE_VISIBILITY static _LIBCPP_CONSTEXPR type quiet_NaN() _NOEXCEPT {return type(0);}
285
    _LIBCPP_INLINE_VISIBILITY static _LIBCPP_CONSTEXPR type signaling_NaN() _NOEXCEPT {return type(0);}
286
    _LIBCPP_INLINE_VISIBILITY static _LIBCPP_CONSTEXPR type denorm_min() _NOEXCEPT {return type(0);}
287

    
288
    static _LIBCPP_CONSTEXPR const bool is_iec559 = false;
289
    static _LIBCPP_CONSTEXPR const bool is_bounded = true;
290
    static _LIBCPP_CONSTEXPR const bool is_modulo = false;
291

    
292
    static _LIBCPP_CONSTEXPR const bool traps = false;
293
    static _LIBCPP_CONSTEXPR const bool tinyness_before = false;
294
    static _LIBCPP_CONSTEXPR const float_round_style round_style = round_toward_zero;
295
};
296

    
297
template <>
298
class __libcpp_numeric_limits<float, true>
299
{
300
protected:
301
    typedef float type;
302

    
303
    static _LIBCPP_CONSTEXPR const bool is_specialized = true;
304

    
305
    static _LIBCPP_CONSTEXPR const bool is_signed = true;
306
    static _LIBCPP_CONSTEXPR const int  digits = __FLT_MANT_DIG__;
307
    static _LIBCPP_CONSTEXPR const int  digits10 = __FLT_DIG__;
308
    static _LIBCPP_CONSTEXPR const int  max_digits10 = 2+(digits * 30103)/100000;
309
    _LIBCPP_INLINE_VISIBILITY static _LIBCPP_CONSTEXPR type min() _NOEXCEPT {return __FLT_MIN__;}
310
    _LIBCPP_INLINE_VISIBILITY static _LIBCPP_CONSTEXPR type max() _NOEXCEPT {return __FLT_MAX__;}
311
    _LIBCPP_INLINE_VISIBILITY static _LIBCPP_CONSTEXPR type lowest() _NOEXCEPT {return -max();}
312

    
313
    static _LIBCPP_CONSTEXPR const bool is_integer = false;
314
    static _LIBCPP_CONSTEXPR const bool is_exact = false;
315
    static _LIBCPP_CONSTEXPR const int  radix = __FLT_RADIX__;
316
    _LIBCPP_INLINE_VISIBILITY static _LIBCPP_CONSTEXPR type epsilon() _NOEXCEPT {return __FLT_EPSILON__;}
317
    _LIBCPP_INLINE_VISIBILITY static _LIBCPP_CONSTEXPR type round_error() _NOEXCEPT {return 0.5F;}
318

    
319
    static _LIBCPP_CONSTEXPR const int  min_exponent = __FLT_MIN_EXP__;
320
    static _LIBCPP_CONSTEXPR const int  min_exponent10 = __FLT_MIN_10_EXP__;
321
    static _LIBCPP_CONSTEXPR const int  max_exponent = __FLT_MAX_EXP__;
322
    static _LIBCPP_CONSTEXPR const int  max_exponent10 = __FLT_MAX_10_EXP__;
323

    
324
    static _LIBCPP_CONSTEXPR const bool has_infinity = true;
325
    static _LIBCPP_CONSTEXPR const bool has_quiet_NaN = true;
326
    static _LIBCPP_CONSTEXPR const bool has_signaling_NaN = true;
327
    static _LIBCPP_CONSTEXPR const float_denorm_style has_denorm = denorm_present;
328
    static _LIBCPP_CONSTEXPR const bool has_denorm_loss = false;
329
    _LIBCPP_INLINE_VISIBILITY static _LIBCPP_CONSTEXPR type infinity() _NOEXCEPT {return __builtin_huge_valf();}
330
    _LIBCPP_INLINE_VISIBILITY static _LIBCPP_CONSTEXPR type quiet_NaN() _NOEXCEPT {return __builtin_nanf("");}
331
    _LIBCPP_INLINE_VISIBILITY static _LIBCPP_CONSTEXPR type signaling_NaN() _NOEXCEPT {return __builtin_nansf("");}
332
    _LIBCPP_INLINE_VISIBILITY static _LIBCPP_CONSTEXPR type denorm_min() _NOEXCEPT {return __FLT_DENORM_MIN__;}
333

    
334
    static _LIBCPP_CONSTEXPR const bool is_iec559 = true;
335
    static _LIBCPP_CONSTEXPR const bool is_bounded = true;
336
    static _LIBCPP_CONSTEXPR const bool is_modulo = false;
337

    
338
    static _LIBCPP_CONSTEXPR const bool traps = false;
339
    static _LIBCPP_CONSTEXPR const bool tinyness_before = false;
340
    static _LIBCPP_CONSTEXPR const float_round_style round_style = round_to_nearest;
341
};
342

    
343
template <>
344
class __libcpp_numeric_limits<double, true>
345
{
346
protected:
347
    typedef double type;
348

    
349
    static _LIBCPP_CONSTEXPR const bool is_specialized = true;
350

    
351
    static _LIBCPP_CONSTEXPR const bool is_signed = true;
352
    static _LIBCPP_CONSTEXPR const int  digits = __DBL_MANT_DIG__;
353
    static _LIBCPP_CONSTEXPR const int  digits10 = __DBL_DIG__;
354
    static _LIBCPP_CONSTEXPR const int  max_digits10 = 2+(digits * 30103)/100000;
355
    _LIBCPP_INLINE_VISIBILITY static _LIBCPP_CONSTEXPR type min() _NOEXCEPT {return __DBL_MIN__;}
356
    _LIBCPP_INLINE_VISIBILITY static _LIBCPP_CONSTEXPR type max() _NOEXCEPT {return __DBL_MAX__;}
357
    _LIBCPP_INLINE_VISIBILITY static _LIBCPP_CONSTEXPR type lowest() _NOEXCEPT {return -max();}
358

    
359
    static _LIBCPP_CONSTEXPR const bool is_integer = false;
360
    static _LIBCPP_CONSTEXPR const bool is_exact = false;
361
    static _LIBCPP_CONSTEXPR const int  radix = __FLT_RADIX__;
362
    _LIBCPP_INLINE_VISIBILITY static _LIBCPP_CONSTEXPR type epsilon() _NOEXCEPT {return __DBL_EPSILON__;}
363
    _LIBCPP_INLINE_VISIBILITY static _LIBCPP_CONSTEXPR type round_error() _NOEXCEPT {return 0.5;}
364

    
365
    static _LIBCPP_CONSTEXPR const int  min_exponent = __DBL_MIN_EXP__;
366
    static _LIBCPP_CONSTEXPR const int  min_exponent10 = __DBL_MIN_10_EXP__;
367
    static _LIBCPP_CONSTEXPR const int  max_exponent = __DBL_MAX_EXP__;
368
    static _LIBCPP_CONSTEXPR const int  max_exponent10 = __DBL_MAX_10_EXP__;
369

    
370
    static _LIBCPP_CONSTEXPR const bool has_infinity = true;
371
    static _LIBCPP_CONSTEXPR const bool has_quiet_NaN = true;
372
    static _LIBCPP_CONSTEXPR const bool has_signaling_NaN = true;
373
    static _LIBCPP_CONSTEXPR const float_denorm_style has_denorm = denorm_present;
374
    static _LIBCPP_CONSTEXPR const bool has_denorm_loss = false;
375
    _LIBCPP_INLINE_VISIBILITY static _LIBCPP_CONSTEXPR type infinity() _NOEXCEPT {return __builtin_huge_val();}
376
    _LIBCPP_INLINE_VISIBILITY static _LIBCPP_CONSTEXPR type quiet_NaN() _NOEXCEPT {return __builtin_nan("");}
377
    _LIBCPP_INLINE_VISIBILITY static _LIBCPP_CONSTEXPR type signaling_NaN() _NOEXCEPT {return __builtin_nans("");}
378
    _LIBCPP_INLINE_VISIBILITY static _LIBCPP_CONSTEXPR type denorm_min() _NOEXCEPT {return __DBL_DENORM_MIN__;}
379

    
380
    static _LIBCPP_CONSTEXPR const bool is_iec559 = true;
381
    static _LIBCPP_CONSTEXPR const bool is_bounded = true;
382
    static _LIBCPP_CONSTEXPR const bool is_modulo = false;
383

    
384
    static _LIBCPP_CONSTEXPR const bool traps = false;
385
    static _LIBCPP_CONSTEXPR const bool tinyness_before = false;
386
    static _LIBCPP_CONSTEXPR const float_round_style round_style = round_to_nearest;
387
};
388

    
389
template <>
390
class __libcpp_numeric_limits<long double, true>
391
{
392
protected:
393
    typedef long double type;
394

    
395
    static _LIBCPP_CONSTEXPR const bool is_specialized = true;
396

    
397
    static _LIBCPP_CONSTEXPR const bool is_signed = true;
398
    static _LIBCPP_CONSTEXPR const int  digits = __LDBL_MANT_DIG__;
399
    static _LIBCPP_CONSTEXPR const int  digits10 = __LDBL_DIG__;
400
    static _LIBCPP_CONSTEXPR const int  max_digits10 = 2+(digits * 30103)/100000;
401
    _LIBCPP_INLINE_VISIBILITY static _LIBCPP_CONSTEXPR type min() _NOEXCEPT {return __LDBL_MIN__;}
402
    _LIBCPP_INLINE_VISIBILITY static _LIBCPP_CONSTEXPR type max() _NOEXCEPT {return __LDBL_MAX__;}
403
    _LIBCPP_INLINE_VISIBILITY static _LIBCPP_CONSTEXPR type lowest() _NOEXCEPT {return -max();}
404

    
405
    static _LIBCPP_CONSTEXPR const bool is_integer = false;
406
    static _LIBCPP_CONSTEXPR const bool is_exact = false;
407
    static _LIBCPP_CONSTEXPR const int  radix = __FLT_RADIX__;
408
    _LIBCPP_INLINE_VISIBILITY static _LIBCPP_CONSTEXPR type epsilon() _NOEXCEPT {return __LDBL_EPSILON__;}
409
    _LIBCPP_INLINE_VISIBILITY static _LIBCPP_CONSTEXPR type round_error() _NOEXCEPT {return 0.5;}
410

    
411
    static _LIBCPP_CONSTEXPR const int  min_exponent = __LDBL_MIN_EXP__;
412
    static _LIBCPP_CONSTEXPR const int  min_exponent10 = __LDBL_MIN_10_EXP__;
413
    static _LIBCPP_CONSTEXPR const int  max_exponent = __LDBL_MAX_EXP__;
414
    static _LIBCPP_CONSTEXPR const int  max_exponent10 = __LDBL_MAX_10_EXP__;
415

    
416
    static _LIBCPP_CONSTEXPR const bool has_infinity = true;
417
    static _LIBCPP_CONSTEXPR const bool has_quiet_NaN = true;
418
    static _LIBCPP_CONSTEXPR const bool has_signaling_NaN = true;
419
    static _LIBCPP_CONSTEXPR const float_denorm_style has_denorm = denorm_present;
420
    static _LIBCPP_CONSTEXPR const bool has_denorm_loss = false;
421
    _LIBCPP_INLINE_VISIBILITY static _LIBCPP_CONSTEXPR type infinity() _NOEXCEPT {return __builtin_huge_vall();}
422
    _LIBCPP_INLINE_VISIBILITY static _LIBCPP_CONSTEXPR type quiet_NaN() _NOEXCEPT {return __builtin_nanl("");}
423
    _LIBCPP_INLINE_VISIBILITY static _LIBCPP_CONSTEXPR type signaling_NaN() _NOEXCEPT {return __builtin_nansl("");}
424
    _LIBCPP_INLINE_VISIBILITY static _LIBCPP_CONSTEXPR type denorm_min() _NOEXCEPT {return __LDBL_DENORM_MIN__;}
425

    
426
#if (defined(__ppc__) || defined(__ppc64__))
427
    static _LIBCPP_CONSTEXPR const bool is_iec559 = false;
428
#else
429
    static _LIBCPP_CONSTEXPR const bool is_iec559 = true;
430
#endif
431
    static _LIBCPP_CONSTEXPR const bool is_bounded = true;
432
    static _LIBCPP_CONSTEXPR const bool is_modulo = false;
433

    
434
    static _LIBCPP_CONSTEXPR const bool traps = false;
435
    static _LIBCPP_CONSTEXPR const bool tinyness_before = false;
436
    static _LIBCPP_CONSTEXPR const float_round_style round_style = round_to_nearest;
437
};
438

    
439
template <class _Tp>
440
class _LIBCPP_TYPE_VIS_ONLY numeric_limits
441
    : private __libcpp_numeric_limits<typename remove_cv<_Tp>::type>
442
{
443
    typedef __libcpp_numeric_limits<typename remove_cv<_Tp>::type> __base;
444
    typedef typename __base::type type;
445
public:
446
    static _LIBCPP_CONSTEXPR const bool is_specialized = __base::is_specialized;
447
    _LIBCPP_INLINE_VISIBILITY static _LIBCPP_CONSTEXPR type min() _NOEXCEPT {return __base::min();}
448
    _LIBCPP_INLINE_VISIBILITY static _LIBCPP_CONSTEXPR type max() _NOEXCEPT {return __base::max();}
449
    _LIBCPP_INLINE_VISIBILITY static _LIBCPP_CONSTEXPR type lowest() _NOEXCEPT {return __base::lowest();}
450

    
451
    static _LIBCPP_CONSTEXPR const int  digits = __base::digits;
452
    static _LIBCPP_CONSTEXPR const int  digits10 = __base::digits10;
453
    static _LIBCPP_CONSTEXPR const int  max_digits10 = __base::max_digits10;
454
    static _LIBCPP_CONSTEXPR const bool is_signed = __base::is_signed;
455
    static _LIBCPP_CONSTEXPR const bool is_integer = __base::is_integer;
456
    static _LIBCPP_CONSTEXPR const bool is_exact = __base::is_exact;
457
    static _LIBCPP_CONSTEXPR const int  radix = __base::radix;
458
    _LIBCPP_INLINE_VISIBILITY static _LIBCPP_CONSTEXPR type epsilon() _NOEXCEPT {return __base::epsilon();}
459
    _LIBCPP_INLINE_VISIBILITY static _LIBCPP_CONSTEXPR type round_error() _NOEXCEPT {return __base::round_error();}
460

    
461
    static _LIBCPP_CONSTEXPR const int  min_exponent = __base::min_exponent;
462
    static _LIBCPP_CONSTEXPR const int  min_exponent10 = __base::min_exponent10;
463
    static _LIBCPP_CONSTEXPR const int  max_exponent = __base::max_exponent;
464
    static _LIBCPP_CONSTEXPR const int  max_exponent10 = __base::max_exponent10;
465

    
466
    static _LIBCPP_CONSTEXPR const bool has_infinity = __base::has_infinity;
467
    static _LIBCPP_CONSTEXPR const bool has_quiet_NaN = __base::has_quiet_NaN;
468
    static _LIBCPP_CONSTEXPR const bool has_signaling_NaN = __base::has_signaling_NaN;
469
    static _LIBCPP_CONSTEXPR const float_denorm_style has_denorm = __base::has_denorm;
470
    static _LIBCPP_CONSTEXPR const bool has_denorm_loss = __base::has_denorm_loss;
471
    _LIBCPP_INLINE_VISIBILITY static _LIBCPP_CONSTEXPR type infinity() _NOEXCEPT {return __base::infinity();}
472
    _LIBCPP_INLINE_VISIBILITY static _LIBCPP_CONSTEXPR type quiet_NaN() _NOEXCEPT {return __base::quiet_NaN();}
473
    _LIBCPP_INLINE_VISIBILITY static _LIBCPP_CONSTEXPR type signaling_NaN() _NOEXCEPT {return __base::signaling_NaN();}
474
    _LIBCPP_INLINE_VISIBILITY static _LIBCPP_CONSTEXPR type denorm_min() _NOEXCEPT {return __base::denorm_min();}
475

    
476
    static _LIBCPP_CONSTEXPR const bool is_iec559 = __base::is_iec559;
477
    static _LIBCPP_CONSTEXPR const bool is_bounded = __base::is_bounded;
478
    static _LIBCPP_CONSTEXPR const bool is_modulo = __base::is_modulo;
479

    
480
    static _LIBCPP_CONSTEXPR const bool traps = __base::traps;
481
    static _LIBCPP_CONSTEXPR const bool tinyness_before = __base::tinyness_before;
482
    static _LIBCPP_CONSTEXPR const float_round_style round_style = __base::round_style;
483
};
484

    
485
template <class _Tp>
486
    _LIBCPP_CONSTEXPR const bool numeric_limits<_Tp>::is_specialized;
487
template <class _Tp>
488
    _LIBCPP_CONSTEXPR const int numeric_limits<_Tp>::digits;
489
template <class _Tp>
490
    _LIBCPP_CONSTEXPR const int numeric_limits<_Tp>::digits10;
491
template <class _Tp>
492
    _LIBCPP_CONSTEXPR const int numeric_limits<_Tp>::max_digits10;
493
template <class _Tp>
494
    _LIBCPP_CONSTEXPR const bool numeric_limits<_Tp>::is_signed;
495
template <class _Tp>
496
    _LIBCPP_CONSTEXPR const bool numeric_limits<_Tp>::is_integer;
497
template <class _Tp>
498
    _LIBCPP_CONSTEXPR const bool numeric_limits<_Tp>::is_exact;
499
template <class _Tp>
500
    _LIBCPP_CONSTEXPR const int numeric_limits<_Tp>::radix;
501
template <class _Tp>
502
    _LIBCPP_CONSTEXPR const int numeric_limits<_Tp>::min_exponent;
503
template <class _Tp>
504
    _LIBCPP_CONSTEXPR const int numeric_limits<_Tp>::min_exponent10;
505
template <class _Tp>
506
    _LIBCPP_CONSTEXPR const int numeric_limits<_Tp>::max_exponent;
507
template <class _Tp>
508
    _LIBCPP_CONSTEXPR const int numeric_limits<_Tp>::max_exponent10;
509
template <class _Tp>
510
    _LIBCPP_CONSTEXPR const bool numeric_limits<_Tp>::has_infinity;
511
template <class _Tp>
512
    _LIBCPP_CONSTEXPR const bool numeric_limits<_Tp>::has_quiet_NaN;
513
template <class _Tp>
514
    _LIBCPP_CONSTEXPR const bool numeric_limits<_Tp>::has_signaling_NaN;
515
template <class _Tp>
516
    _LIBCPP_CONSTEXPR const float_denorm_style numeric_limits<_Tp>::has_denorm;
517
template <class _Tp>
518
    _LIBCPP_CONSTEXPR const bool numeric_limits<_Tp>::has_denorm_loss;
519
template <class _Tp>
520
    _LIBCPP_CONSTEXPR const bool numeric_limits<_Tp>::is_iec559;
521
template <class _Tp>
522
    _LIBCPP_CONSTEXPR const bool numeric_limits<_Tp>::is_bounded;
523
template <class _Tp>
524
    _LIBCPP_CONSTEXPR const bool numeric_limits<_Tp>::is_modulo;
525
template <class _Tp>
526
    _LIBCPP_CONSTEXPR const bool numeric_limits<_Tp>::traps;
527
template <class _Tp>
528
    _LIBCPP_CONSTEXPR const bool numeric_limits<_Tp>::tinyness_before;
529
template <class _Tp>
530
    _LIBCPP_CONSTEXPR const float_round_style numeric_limits<_Tp>::round_style;
531

    
532
template <class _Tp>
533
class _LIBCPP_TYPE_VIS_ONLY numeric_limits<const _Tp>
534
    : private numeric_limits<_Tp>
535
{
536
    typedef numeric_limits<_Tp> __base;
537
    typedef _Tp type;
538
public:
539
    static _LIBCPP_CONSTEXPR const bool is_specialized = __base::is_specialized;
540
    _LIBCPP_INLINE_VISIBILITY static _LIBCPP_CONSTEXPR type min() _NOEXCEPT {return __base::min();}
541
    _LIBCPP_INLINE_VISIBILITY static _LIBCPP_CONSTEXPR type max() _NOEXCEPT {return __base::max();}
542
    _LIBCPP_INLINE_VISIBILITY static _LIBCPP_CONSTEXPR type lowest() _NOEXCEPT {return __base::lowest();}
543

    
544
    static _LIBCPP_CONSTEXPR const int  digits = __base::digits;
545
    static _LIBCPP_CONSTEXPR const int  digits10 = __base::digits10;
546
    static _LIBCPP_CONSTEXPR const int  max_digits10 = __base::max_digits10;
547
    static _LIBCPP_CONSTEXPR const bool is_signed = __base::is_signed;
548
    static _LIBCPP_CONSTEXPR const bool is_integer = __base::is_integer;
549
    static _LIBCPP_CONSTEXPR const bool is_exact = __base::is_exact;
550
    static _LIBCPP_CONSTEXPR const int  radix = __base::radix;
551
    _LIBCPP_INLINE_VISIBILITY static _LIBCPP_CONSTEXPR type epsilon() _NOEXCEPT {return __base::epsilon();}
552
    _LIBCPP_INLINE_VISIBILITY static _LIBCPP_CONSTEXPR type round_error() _NOEXCEPT {return __base::round_error();}
553

    
554
    static _LIBCPP_CONSTEXPR const int  min_exponent = __base::min_exponent;
555
    static _LIBCPP_CONSTEXPR const int  min_exponent10 = __base::min_exponent10;
556
    static _LIBCPP_CONSTEXPR const int  max_exponent = __base::max_exponent;
557
    static _LIBCPP_CONSTEXPR const int  max_exponent10 = __base::max_exponent10;
558

    
559
    static _LIBCPP_CONSTEXPR const bool has_infinity = __base::has_infinity;
560
    static _LIBCPP_CONSTEXPR const bool has_quiet_NaN = __base::has_quiet_NaN;
561
    static _LIBCPP_CONSTEXPR const bool has_signaling_NaN = __base::has_signaling_NaN;
562
    static _LIBCPP_CONSTEXPR const float_denorm_style has_denorm = __base::has_denorm;
563
    static _LIBCPP_CONSTEXPR const bool has_denorm_loss = __base::has_denorm_loss;
564
    _LIBCPP_INLINE_VISIBILITY static _LIBCPP_CONSTEXPR type infinity() _NOEXCEPT {return __base::infinity();}
565
    _LIBCPP_INLINE_VISIBILITY static _LIBCPP_CONSTEXPR type quiet_NaN() _NOEXCEPT {return __base::quiet_NaN();}
566
    _LIBCPP_INLINE_VISIBILITY static _LIBCPP_CONSTEXPR type signaling_NaN() _NOEXCEPT {return __base::signaling_NaN();}
567
    _LIBCPP_INLINE_VISIBILITY static _LIBCPP_CONSTEXPR type denorm_min() _NOEXCEPT {return __base::denorm_min();}
568

    
569
    static _LIBCPP_CONSTEXPR const bool is_iec559 = __base::is_iec559;
570
    static _LIBCPP_CONSTEXPR const bool is_bounded = __base::is_bounded;
571
    static _LIBCPP_CONSTEXPR const bool is_modulo = __base::is_modulo;
572

    
573
    static _LIBCPP_CONSTEXPR const bool traps = __base::traps;
574
    static _LIBCPP_CONSTEXPR const bool tinyness_before = __base::tinyness_before;
575
    static _LIBCPP_CONSTEXPR const float_round_style round_style = __base::round_style;
576
};
577

    
578
template <class _Tp>
579
    _LIBCPP_CONSTEXPR const bool numeric_limits<const _Tp>::is_specialized;
580
template <class _Tp>
581
    _LIBCPP_CONSTEXPR const int numeric_limits<const _Tp>::digits;
582
template <class _Tp>
583
    _LIBCPP_CONSTEXPR const int numeric_limits<const _Tp>::digits10;
584
template <class _Tp>
585
    _LIBCPP_CONSTEXPR const int numeric_limits<const _Tp>::max_digits10;
586
template <class _Tp>
587
    _LIBCPP_CONSTEXPR const bool numeric_limits<const _Tp>::is_signed;
588
template <class _Tp>
589
    _LIBCPP_CONSTEXPR const bool numeric_limits<const _Tp>::is_integer;
590
template <class _Tp>
591
    _LIBCPP_CONSTEXPR const bool numeric_limits<const _Tp>::is_exact;
592
template <class _Tp>
593
    _LIBCPP_CONSTEXPR const int numeric_limits<const _Tp>::radix;
594
template <class _Tp>
595
    _LIBCPP_CONSTEXPR const int numeric_limits<const _Tp>::min_exponent;
596
template <class _Tp>
597
    _LIBCPP_CONSTEXPR const int numeric_limits<const _Tp>::min_exponent10;
598
template <class _Tp>
599
    _LIBCPP_CONSTEXPR const int numeric_limits<const _Tp>::max_exponent;
600
template <class _Tp>
601
    _LIBCPP_CONSTEXPR const int numeric_limits<const _Tp>::max_exponent10;
602
template <class _Tp>
603
    _LIBCPP_CONSTEXPR const bool numeric_limits<const _Tp>::has_infinity;
604
template <class _Tp>
605
    _LIBCPP_CONSTEXPR const bool numeric_limits<const _Tp>::has_quiet_NaN;
606
template <class _Tp>
607
    _LIBCPP_CONSTEXPR const bool numeric_limits<const _Tp>::has_signaling_NaN;
608
template <class _Tp>
609
    _LIBCPP_CONSTEXPR const float_denorm_style numeric_limits<const _Tp>::has_denorm;
610
template <class _Tp>
611
    _LIBCPP_CONSTEXPR const bool numeric_limits<const _Tp>::has_denorm_loss;
612
template <class _Tp>
613
    _LIBCPP_CONSTEXPR const bool numeric_limits<const _Tp>::is_iec559;
614
template <class _Tp>
615
    _LIBCPP_CONSTEXPR const bool numeric_limits<const _Tp>::is_bounded;
616
template <class _Tp>
617
    _LIBCPP_CONSTEXPR const bool numeric_limits<const _Tp>::is_modulo;
618
template <class _Tp>
619
    _LIBCPP_CONSTEXPR const bool numeric_limits<const _Tp>::traps;
620
template <class _Tp>
621
    _LIBCPP_CONSTEXPR const bool numeric_limits<const _Tp>::tinyness_before;
622
template <class _Tp>
623
    _LIBCPP_CONSTEXPR const float_round_style numeric_limits<const _Tp>::round_style;
624

    
625
template <class _Tp>
626
class _LIBCPP_TYPE_VIS_ONLY numeric_limits<volatile _Tp>
627
    : private numeric_limits<_Tp>
628
{
629
    typedef numeric_limits<_Tp> __base;
630
    typedef _Tp type;
631
public:
632
    static _LIBCPP_CONSTEXPR const bool is_specialized = __base::is_specialized;
633
    _LIBCPP_INLINE_VISIBILITY static _LIBCPP_CONSTEXPR type min() _NOEXCEPT {return __base::min();}
634
    _LIBCPP_INLINE_VISIBILITY static _LIBCPP_CONSTEXPR type max() _NOEXCEPT {return __base::max();}
635
    _LIBCPP_INLINE_VISIBILITY static _LIBCPP_CONSTEXPR type lowest() _NOEXCEPT {return __base::lowest();}
636

    
637
    static _LIBCPP_CONSTEXPR const int  digits = __base::digits;
638
    static _LIBCPP_CONSTEXPR const int  digits10 = __base::digits10;
639
    static _LIBCPP_CONSTEXPR const int  max_digits10 = __base::max_digits10;
640
    static _LIBCPP_CONSTEXPR const bool is_signed = __base::is_signed;
641
    static _LIBCPP_CONSTEXPR const bool is_integer = __base::is_integer;
642
    static _LIBCPP_CONSTEXPR const bool is_exact = __base::is_exact;
643
    static _LIBCPP_CONSTEXPR const int  radix = __base::radix;
644
    _LIBCPP_INLINE_VISIBILITY static _LIBCPP_CONSTEXPR type epsilon() _NOEXCEPT {return __base::epsilon();}
645
    _LIBCPP_INLINE_VISIBILITY static _LIBCPP_CONSTEXPR type round_error() _NOEXCEPT {return __base::round_error();}
646

    
647
    static _LIBCPP_CONSTEXPR const int  min_exponent = __base::min_exponent;
648
    static _LIBCPP_CONSTEXPR const int  min_exponent10 = __base::min_exponent10;
649
    static _LIBCPP_CONSTEXPR const int  max_exponent = __base::max_exponent;
650
    static _LIBCPP_CONSTEXPR const int  max_exponent10 = __base::max_exponent10;
651

    
652
    static _LIBCPP_CONSTEXPR const bool has_infinity = __base::has_infinity;
653
    static _LIBCPP_CONSTEXPR const bool has_quiet_NaN = __base::has_quiet_NaN;
654
    static _LIBCPP_CONSTEXPR const bool has_signaling_NaN = __base::has_signaling_NaN;
655
    static _LIBCPP_CONSTEXPR const float_denorm_style has_denorm = __base::has_denorm;
656
    static _LIBCPP_CONSTEXPR const bool has_denorm_loss = __base::has_denorm_loss;
657
    _LIBCPP_INLINE_VISIBILITY static _LIBCPP_CONSTEXPR type infinity() _NOEXCEPT {return __base::infinity();}
658
    _LIBCPP_INLINE_VISIBILITY static _LIBCPP_CONSTEXPR type quiet_NaN() _NOEXCEPT {return __base::quiet_NaN();}
659
    _LIBCPP_INLINE_VISIBILITY static _LIBCPP_CONSTEXPR type signaling_NaN() _NOEXCEPT {return __base::signaling_NaN();}
660
    _LIBCPP_INLINE_VISIBILITY static _LIBCPP_CONSTEXPR type denorm_min() _NOEXCEPT {return __base::denorm_min();}
661

    
662
    static _LIBCPP_CONSTEXPR const bool is_iec559 = __base::is_iec559;
663
    static _LIBCPP_CONSTEXPR const bool is_bounded = __base::is_bounded;
664
    static _LIBCPP_CONSTEXPR const bool is_modulo = __base::is_modulo;
665

    
666
    static _LIBCPP_CONSTEXPR const bool traps = __base::traps;
667
    static _LIBCPP_CONSTEXPR const bool tinyness_before = __base::tinyness_before;
668
    static _LIBCPP_CONSTEXPR const float_round_style round_style = __base::round_style;
669
};
670

    
671
template <class _Tp>
672
    _LIBCPP_CONSTEXPR const bool numeric_limits<volatile _Tp>::is_specialized;
673
template <class _Tp>
674
    _LIBCPP_CONSTEXPR const int numeric_limits<volatile _Tp>::digits;
675
template <class _Tp>
676
    _LIBCPP_CONSTEXPR const int numeric_limits<volatile _Tp>::digits10;
677
template <class _Tp>
678
    _LIBCPP_CONSTEXPR const int numeric_limits<volatile _Tp>::max_digits10;
679
template <class _Tp>
680
    _LIBCPP_CONSTEXPR const bool numeric_limits<volatile _Tp>::is_signed;
681
template <class _Tp>
682
    _LIBCPP_CONSTEXPR const bool numeric_limits<volatile _Tp>::is_integer;
683
template <class _Tp>
684
    _LIBCPP_CONSTEXPR const bool numeric_limits<volatile _Tp>::is_exact;
685
template <class _Tp>
686
    _LIBCPP_CONSTEXPR const int numeric_limits<volatile _Tp>::radix;
687
template <class _Tp>
688
    _LIBCPP_CONSTEXPR const int numeric_limits<volatile _Tp>::min_exponent;
689
template <class _Tp>
690
    _LIBCPP_CONSTEXPR const int numeric_limits<volatile _Tp>::min_exponent10;
691
template <class _Tp>
692
    _LIBCPP_CONSTEXPR const int numeric_limits<volatile _Tp>::max_exponent;
693
template <class _Tp>
694
    _LIBCPP_CONSTEXPR const int numeric_limits<volatile _Tp>::max_exponent10;
695
template <class _Tp>
696
    _LIBCPP_CONSTEXPR const bool numeric_limits<volatile _Tp>::has_infinity;
697
template <class _Tp>
698
    _LIBCPP_CONSTEXPR const bool numeric_limits<volatile _Tp>::has_quiet_NaN;
699
template <class _Tp>
700
    _LIBCPP_CONSTEXPR const bool numeric_limits<volatile _Tp>::has_signaling_NaN;
701
template <class _Tp>
702
    _LIBCPP_CONSTEXPR const float_denorm_style numeric_limits<volatile _Tp>::has_denorm;
703
template <class _Tp>
704
    _LIBCPP_CONSTEXPR const bool numeric_limits<volatile _Tp>::has_denorm_loss;
705
template <class _Tp>
706
    _LIBCPP_CONSTEXPR const bool numeric_limits<volatile _Tp>::is_iec559;
707
template <class _Tp>
708
    _LIBCPP_CONSTEXPR const bool numeric_limits<volatile _Tp>::is_bounded;
709
template <class _Tp>
710
    _LIBCPP_CONSTEXPR const bool numeric_limits<volatile _Tp>::is_modulo;
711
template <class _Tp>
712
    _LIBCPP_CONSTEXPR const bool numeric_limits<volatile _Tp>::traps;
713
template <class _Tp>
714
    _LIBCPP_CONSTEXPR const bool numeric_limits<volatile _Tp>::tinyness_before;
715
template <class _Tp>
716
    _LIBCPP_CONSTEXPR const float_round_style numeric_limits<volatile _Tp>::round_style;
717

    
718
template <class _Tp>
719
class _LIBCPP_TYPE_VIS_ONLY numeric_limits<const volatile _Tp>
720
    : private numeric_limits<_Tp>
721
{
722
    typedef numeric_limits<_Tp> __base;
723
    typedef _Tp type;
724
public:
725
    static _LIBCPP_CONSTEXPR const bool is_specialized = __base::is_specialized;
726
    _LIBCPP_INLINE_VISIBILITY static _LIBCPP_CONSTEXPR type min() _NOEXCEPT {return __base::min();}
727
    _LIBCPP_INLINE_VISIBILITY static _LIBCPP_CONSTEXPR type max() _NOEXCEPT {return __base::max();}
728
    _LIBCPP_INLINE_VISIBILITY static _LIBCPP_CONSTEXPR type lowest() _NOEXCEPT {return __base::lowest();}
729

    
730
    static _LIBCPP_CONSTEXPR const int  digits = __base::digits;
731
    static _LIBCPP_CONSTEXPR const int  digits10 = __base::digits10;
732
    static _LIBCPP_CONSTEXPR const int  max_digits10 = __base::max_digits10;
733
    static _LIBCPP_CONSTEXPR const bool is_signed = __base::is_signed;
734
    static _LIBCPP_CONSTEXPR const bool is_integer = __base::is_integer;
735
    static _LIBCPP_CONSTEXPR const bool is_exact = __base::is_exact;
736
    static _LIBCPP_CONSTEXPR const int  radix = __base::radix;
737
    _LIBCPP_INLINE_VISIBILITY static _LIBCPP_CONSTEXPR type epsilon() _NOEXCEPT {return __base::epsilon();}
738
    _LIBCPP_INLINE_VISIBILITY static _LIBCPP_CONSTEXPR type round_error() _NOEXCEPT {return __base::round_error();}
739

    
740
    static _LIBCPP_CONSTEXPR const int  min_exponent = __base::min_exponent;
741
    static _LIBCPP_CONSTEXPR const int  min_exponent10 = __base::min_exponent10;
742
    static _LIBCPP_CONSTEXPR const int  max_exponent = __base::max_exponent;
743
    static _LIBCPP_CONSTEXPR const int  max_exponent10 = __base::max_exponent10;
744

    
745
    static _LIBCPP_CONSTEXPR const bool has_infinity = __base::has_infinity;
746
    static _LIBCPP_CONSTEXPR const bool has_quiet_NaN = __base::has_quiet_NaN;
747
    static _LIBCPP_CONSTEXPR const bool has_signaling_NaN = __base::has_signaling_NaN;
748
    static _LIBCPP_CONSTEXPR const float_denorm_style has_denorm = __base::has_denorm;
749
    static _LIBCPP_CONSTEXPR const bool has_denorm_loss = __base::has_denorm_loss;
750
    _LIBCPP_INLINE_VISIBILITY static _LIBCPP_CONSTEXPR type infinity() _NOEXCEPT {return __base::infinity();}
751
    _LIBCPP_INLINE_VISIBILITY static _LIBCPP_CONSTEXPR type quiet_NaN() _NOEXCEPT {return __base::quiet_NaN();}
752
    _LIBCPP_INLINE_VISIBILITY static _LIBCPP_CONSTEXPR type signaling_NaN() _NOEXCEPT {return __base::signaling_NaN();}
753
    _LIBCPP_INLINE_VISIBILITY static _LIBCPP_CONSTEXPR type denorm_min() _NOEXCEPT {return __base::denorm_min();}
754

    
755
    static _LIBCPP_CONSTEXPR const bool is_iec559 = __base::is_iec559;
756
    static _LIBCPP_CONSTEXPR const bool is_bounded = __base::is_bounded;
757
    static _LIBCPP_CONSTEXPR const bool is_modulo = __base::is_modulo;
758

    
759
    static _LIBCPP_CONSTEXPR const bool traps = __base::traps;
760
    static _LIBCPP_CONSTEXPR const bool tinyness_before = __base::tinyness_before;
761
    static _LIBCPP_CONSTEXPR const float_round_style round_style = __base::round_style;
762
};
763

    
764
template <class _Tp>
765
    _LIBCPP_CONSTEXPR const bool numeric_limits<const volatile _Tp>::is_specialized;
766
template <class _Tp>
767
    _LIBCPP_CONSTEXPR const int numeric_limits<const volatile _Tp>::digits;
768
template <class _Tp>
769
    _LIBCPP_CONSTEXPR const int numeric_limits<const volatile _Tp>::digits10;
770
template <class _Tp>
771
    _LIBCPP_CONSTEXPR const int numeric_limits<const volatile _Tp>::max_digits10;
772
template <class _Tp>
773
    _LIBCPP_CONSTEXPR const bool numeric_limits<const volatile _Tp>::is_signed;
774
template <class _Tp>
775
    _LIBCPP_CONSTEXPR const bool numeric_limits<const volatile _Tp>::is_integer;
776
template <class _Tp>
777
    _LIBCPP_CONSTEXPR const bool numeric_limits<const volatile _Tp>::is_exact;
778
template <class _Tp>
779
    _LIBCPP_CONSTEXPR const int numeric_limits<const volatile _Tp>::radix;
780
template <class _Tp>
781
    _LIBCPP_CONSTEXPR const int numeric_limits<const volatile _Tp>::min_exponent;
782
template <class _Tp>
783
    _LIBCPP_CONSTEXPR const int numeric_limits<const volatile _Tp>::min_exponent10;
784
template <class _Tp>
785
    _LIBCPP_CONSTEXPR const int numeric_limits<const volatile _Tp>::max_exponent;
786
template <class _Tp>
787
    _LIBCPP_CONSTEXPR const int numeric_limits<const volatile _Tp>::max_exponent10;
788
template <class _Tp>
789
    _LIBCPP_CONSTEXPR const bool numeric_limits<const volatile _Tp>::has_infinity;
790
template <class _Tp>
791
    _LIBCPP_CONSTEXPR const bool numeric_limits<const volatile _Tp>::has_quiet_NaN;
792
template <class _Tp>
793
    _LIBCPP_CONSTEXPR const bool numeric_limits<const volatile _Tp>::has_signaling_NaN;
794
template <class _Tp>
795
    _LIBCPP_CONSTEXPR const float_denorm_style numeric_limits<const volatile _Tp>::has_denorm;
796
template <class _Tp>
797
    _LIBCPP_CONSTEXPR const bool numeric_limits<const volatile _Tp>::has_denorm_loss;
798
template <class _Tp>
799
    _LIBCPP_CONSTEXPR const bool numeric_limits<const volatile _Tp>::is_iec559;
800
template <class _Tp>
801
    _LIBCPP_CONSTEXPR const bool numeric_limits<const volatile _Tp>::is_bounded;
802
template <class _Tp>
803
    _LIBCPP_CONSTEXPR const bool numeric_limits<const volatile _Tp>::is_modulo;
804
template <class _Tp>
805
    _LIBCPP_CONSTEXPR const bool numeric_limits<const volatile _Tp>::traps;
806
template <class _Tp>
807
    _LIBCPP_CONSTEXPR const bool numeric_limits<const volatile _Tp>::tinyness_before;
808
template <class _Tp>
809
    _LIBCPP_CONSTEXPR const float_round_style numeric_limits<const volatile _Tp>::round_style;
810

    
811
_LIBCPP_END_NAMESPACE_STD
812

    
813
#endif  // _LIBCPP_LIMITS