xref: /freebsd-12.1/contrib/libc++/include/limits (revision b5893f02)
17a984708SDavid Chisnall// -*- C++ -*-
27a984708SDavid Chisnall//===---------------------------- limits ----------------------------------===//
37a984708SDavid Chisnall//
47a984708SDavid Chisnall//                     The LLVM Compiler Infrastructure
57a984708SDavid Chisnall//
67a984708SDavid Chisnall// This file is dual licensed under the MIT and the University of Illinois Open
77a984708SDavid Chisnall// Source Licenses. See LICENSE.TXT for details.
87a984708SDavid Chisnall//
97a984708SDavid Chisnall//===----------------------------------------------------------------------===//
107a984708SDavid Chisnall
117a984708SDavid Chisnall#ifndef _LIBCPP_LIMITS
127a984708SDavid Chisnall#define _LIBCPP_LIMITS
137a984708SDavid Chisnall
147a984708SDavid Chisnall/*
157a984708SDavid Chisnall    limits synopsis
167a984708SDavid Chisnall
177a984708SDavid Chisnallnamespace std
187a984708SDavid Chisnall{
197a984708SDavid Chisnall
207a984708SDavid Chisnalltemplate<class T>
217a984708SDavid Chisnallclass numeric_limits
227a984708SDavid Chisnall{
237a984708SDavid Chisnallpublic:
24b03f91a8SDavid Chisnall    static constexpr bool is_specialized = false;
25b03f91a8SDavid Chisnall    static constexpr T min() noexcept;
26b03f91a8SDavid Chisnall    static constexpr T max() noexcept;
27b03f91a8SDavid Chisnall    static constexpr T lowest() noexcept;
287a984708SDavid Chisnall
29b03f91a8SDavid Chisnall    static constexpr int  digits = 0;
30b03f91a8SDavid Chisnall    static constexpr int  digits10 = 0;
31b03f91a8SDavid Chisnall    static constexpr int  max_digits10 = 0;
32b03f91a8SDavid Chisnall    static constexpr bool is_signed = false;
33b03f91a8SDavid Chisnall    static constexpr bool is_integer = false;
34b03f91a8SDavid Chisnall    static constexpr bool is_exact = false;
35b03f91a8SDavid Chisnall    static constexpr int  radix = 0;
36b03f91a8SDavid Chisnall    static constexpr T epsilon() noexcept;
37b03f91a8SDavid Chisnall    static constexpr T round_error() noexcept;
387a984708SDavid Chisnall
39b03f91a8SDavid Chisnall    static constexpr int  min_exponent = 0;
40b03f91a8SDavid Chisnall    static constexpr int  min_exponent10 = 0;
41b03f91a8SDavid Chisnall    static constexpr int  max_exponent = 0;
42b03f91a8SDavid Chisnall    static constexpr int  max_exponent10 = 0;
437a984708SDavid Chisnall
44b03f91a8SDavid Chisnall    static constexpr bool has_infinity = false;
45b03f91a8SDavid Chisnall    static constexpr bool has_quiet_NaN = false;
46b03f91a8SDavid Chisnall    static constexpr bool has_signaling_NaN = false;
47b03f91a8SDavid Chisnall    static constexpr float_denorm_style has_denorm = denorm_absent;
48b03f91a8SDavid Chisnall    static constexpr bool has_denorm_loss = false;
49b03f91a8SDavid Chisnall    static constexpr T infinity() noexcept;
50b03f91a8SDavid Chisnall    static constexpr T quiet_NaN() noexcept;
51b03f91a8SDavid Chisnall    static constexpr T signaling_NaN() noexcept;
52b03f91a8SDavid Chisnall    static constexpr T denorm_min() noexcept;
537a984708SDavid Chisnall
54b03f91a8SDavid Chisnall    static constexpr bool is_iec559 = false;
55b03f91a8SDavid Chisnall    static constexpr bool is_bounded = false;
56b03f91a8SDavid Chisnall    static constexpr bool is_modulo = false;
577a984708SDavid Chisnall
58b03f91a8SDavid Chisnall    static constexpr bool traps = false;
59b03f91a8SDavid Chisnall    static constexpr bool tinyness_before = false;
60b03f91a8SDavid Chisnall    static constexpr float_round_style round_style = round_toward_zero;
617a984708SDavid Chisnall};
627a984708SDavid Chisnall
637a984708SDavid Chisnallenum float_round_style
647a984708SDavid Chisnall{
657a984708SDavid Chisnall    round_indeterminate       = -1,
667a984708SDavid Chisnall    round_toward_zero         =  0,
677a984708SDavid Chisnall    round_to_nearest          =  1,
687a984708SDavid Chisnall    round_toward_infinity     =  2,
697a984708SDavid Chisnall    round_toward_neg_infinity =  3
707a984708SDavid Chisnall};
717a984708SDavid Chisnall
727a984708SDavid Chisnallenum float_denorm_style
737a984708SDavid Chisnall{
747a984708SDavid Chisnall    denorm_indeterminate = -1,
757a984708SDavid Chisnall    denorm_absent = 0,
767a984708SDavid Chisnall    denorm_present = 1
777a984708SDavid Chisnall};
787a984708SDavid Chisnall
797a984708SDavid Chisnalltemplate<> class numeric_limits<cv bool>;
807a984708SDavid Chisnall
817a984708SDavid Chisnalltemplate<> class numeric_limits<cv char>;
827a984708SDavid Chisnalltemplate<> class numeric_limits<cv signed char>;
837a984708SDavid Chisnalltemplate<> class numeric_limits<cv unsigned char>;
847a984708SDavid Chisnalltemplate<> class numeric_limits<cv wchar_t>;
85*b5893f02SDimitry Andrictemplate<> class numeric_limits<cv char8_t>; // C++20
867a984708SDavid Chisnalltemplate<> class numeric_limits<cv char16_t>;
877a984708SDavid Chisnalltemplate<> class numeric_limits<cv char32_t>;
887a984708SDavid Chisnall
897a984708SDavid Chisnalltemplate<> class numeric_limits<cv short>;
907a984708SDavid Chisnalltemplate<> class numeric_limits<cv int>;
917a984708SDavid Chisnalltemplate<> class numeric_limits<cv long>;
927a984708SDavid Chisnalltemplate<> class numeric_limits<cv long long>;
937a984708SDavid Chisnalltemplate<> class numeric_limits<cv unsigned short>;
947a984708SDavid Chisnalltemplate<> class numeric_limits<cv unsigned int>;
957a984708SDavid Chisnalltemplate<> class numeric_limits<cv unsigned long>;
967a984708SDavid Chisnalltemplate<> class numeric_limits<cv unsigned long long>;
977a984708SDavid Chisnall
987a984708SDavid Chisnalltemplate<> class numeric_limits<cv float>;
997a984708SDavid Chisnalltemplate<> class numeric_limits<cv double>;
1007a984708SDavid Chisnalltemplate<> class numeric_limits<cv long double>;
1017a984708SDavid Chisnall
1027a984708SDavid Chisnall}  // std
1037a984708SDavid Chisnall
1047a984708SDavid Chisnall*/
105540d2a8bSDimitry Andric#include <__config>
1067a984708SDavid Chisnall#include <type_traits>
1077a984708SDavid Chisnall
1085517e702SDimitry Andric#if defined(_LIBCPP_COMPILER_MSVC)
1095517e702SDimitry Andric#include "support/win32/limits_msvc_win32.h"
1104f7ab58eSDimitry Andric#endif // _LIBCPP_MSVCRT
1114f7ab58eSDimitry Andric
1124f7ab58eSDimitry Andric#if defined(__IBMCPP__)
1134f7ab58eSDimitry Andric#include "support/ibm/limits.h"
1144f7ab58eSDimitry Andric#endif // __IBMCPP__
1157a984708SDavid Chisnall
116f9448bf3SDimitry Andric#if !defined(_LIBCPP_HAS_NO_PRAGMA_SYSTEM_HEADER)
117f9448bf3SDimitry Andric#pragma GCC system_header
118f9448bf3SDimitry Andric#endif
119f9448bf3SDimitry Andric
120f9448bf3SDimitry Andric_LIBCPP_PUSH_MACROS
121f9448bf3SDimitry Andric#include <__undef_macros>
122*b5893f02SDimitry Andric#include <version>
123f9448bf3SDimitry Andric
124f9448bf3SDimitry Andric
1257a984708SDavid Chisnall_LIBCPP_BEGIN_NAMESPACE_STD
1267a984708SDavid Chisnall
1277a984708SDavid Chisnallenum float_round_style
1287a984708SDavid Chisnall{
1297a984708SDavid Chisnall    round_indeterminate       = -1,
1307a984708SDavid Chisnall    round_toward_zero         =  0,
1317a984708SDavid Chisnall    round_to_nearest          =  1,
1327a984708SDavid Chisnall    round_toward_infinity     =  2,
1337a984708SDavid Chisnall    round_toward_neg_infinity =  3
1347a984708SDavid Chisnall};
1357a984708SDavid Chisnall
1367a984708SDavid Chisnallenum float_denorm_style
1377a984708SDavid Chisnall{
1387a984708SDavid Chisnall    denorm_indeterminate = -1,
1397a984708SDavid Chisnall    denorm_absent = 0,
1407a984708SDavid Chisnall    denorm_present = 1
1417a984708SDavid Chisnall};
1427a984708SDavid Chisnall
1437a984708SDavid Chisnalltemplate <class _Tp, bool = is_arithmetic<_Tp>::value>
1447a984708SDavid Chisnallclass __libcpp_numeric_limits
1457a984708SDavid Chisnall{
1467a984708SDavid Chisnallprotected:
1477a984708SDavid Chisnall    typedef _Tp type;
1487a984708SDavid Chisnall
149b03f91a8SDavid Chisnall    static _LIBCPP_CONSTEXPR const  bool is_specialized = false;
150b03f91a8SDavid Chisnall    _LIBCPP_INLINE_VISIBILITY static _LIBCPP_CONSTEXPR type min() _NOEXCEPT {return type();}
151b03f91a8SDavid Chisnall    _LIBCPP_INLINE_VISIBILITY static _LIBCPP_CONSTEXPR type max() _NOEXCEPT {return type();}
152b03f91a8SDavid Chisnall    _LIBCPP_INLINE_VISIBILITY static _LIBCPP_CONSTEXPR type lowest() _NOEXCEPT {return type();}
1537a984708SDavid Chisnall
154b03f91a8SDavid Chisnall    static _LIBCPP_CONSTEXPR const int  digits = 0;
155b03f91a8SDavid Chisnall    static _LIBCPP_CONSTEXPR const int  digits10 = 0;
156b03f91a8SDavid Chisnall    static _LIBCPP_CONSTEXPR const int  max_digits10 = 0;
157b03f91a8SDavid Chisnall    static _LIBCPP_CONSTEXPR const bool is_signed = false;
158b03f91a8SDavid Chisnall    static _LIBCPP_CONSTEXPR const bool is_integer = false;
159b03f91a8SDavid Chisnall    static _LIBCPP_CONSTEXPR const bool is_exact = false;
160b03f91a8SDavid Chisnall    static _LIBCPP_CONSTEXPR const int  radix = 0;
161b03f91a8SDavid Chisnall    _LIBCPP_INLINE_VISIBILITY static _LIBCPP_CONSTEXPR type epsilon() _NOEXCEPT {return type();}
162b03f91a8SDavid Chisnall    _LIBCPP_INLINE_VISIBILITY static _LIBCPP_CONSTEXPR type round_error() _NOEXCEPT {return type();}
1637a984708SDavid Chisnall
164b03f91a8SDavid Chisnall    static _LIBCPP_CONSTEXPR const int  min_exponent = 0;
165b03f91a8SDavid Chisnall    static _LIBCPP_CONSTEXPR const int  min_exponent10 = 0;
166b03f91a8SDavid Chisnall    static _LIBCPP_CONSTEXPR const int  max_exponent = 0;
167b03f91a8SDavid Chisnall    static _LIBCPP_CONSTEXPR const int  max_exponent10 = 0;
1687a984708SDavid Chisnall
169b03f91a8SDavid Chisnall    static _LIBCPP_CONSTEXPR const bool has_infinity = false;
170b03f91a8SDavid Chisnall    static _LIBCPP_CONSTEXPR const bool has_quiet_NaN = false;
171b03f91a8SDavid Chisnall    static _LIBCPP_CONSTEXPR const bool has_signaling_NaN = false;
172b03f91a8SDavid Chisnall    static _LIBCPP_CONSTEXPR const float_denorm_style has_denorm = denorm_absent;
173b03f91a8SDavid Chisnall    static _LIBCPP_CONSTEXPR const bool has_denorm_loss = false;
174b03f91a8SDavid Chisnall    _LIBCPP_INLINE_VISIBILITY static _LIBCPP_CONSTEXPR type infinity() _NOEXCEPT {return type();}
175b03f91a8SDavid Chisnall    _LIBCPP_INLINE_VISIBILITY static _LIBCPP_CONSTEXPR type quiet_NaN() _NOEXCEPT {return type();}
176b03f91a8SDavid Chisnall    _LIBCPP_INLINE_VISIBILITY static _LIBCPP_CONSTEXPR type signaling_NaN() _NOEXCEPT {return type();}
177b03f91a8SDavid Chisnall    _LIBCPP_INLINE_VISIBILITY static _LIBCPP_CONSTEXPR type denorm_min() _NOEXCEPT {return type();}
1787a984708SDavid Chisnall
179b03f91a8SDavid Chisnall    static _LIBCPP_CONSTEXPR const bool is_iec559 = false;
180b03f91a8SDavid Chisnall    static _LIBCPP_CONSTEXPR const bool is_bounded = false;
181b03f91a8SDavid Chisnall    static _LIBCPP_CONSTEXPR const bool is_modulo = false;
1827a984708SDavid Chisnall
183b03f91a8SDavid Chisnall    static _LIBCPP_CONSTEXPR const bool traps = false;
184b03f91a8SDavid Chisnall    static _LIBCPP_CONSTEXPR const bool tinyness_before = false;
185b03f91a8SDavid Chisnall    static _LIBCPP_CONSTEXPR const float_round_style round_style = round_toward_zero;
1867a984708SDavid Chisnall};
1877a984708SDavid Chisnall
188f9448bf3SDimitry Andrictemplate <class _Tp, int __digits, bool _IsSigned>
1897a984708SDavid Chisnallstruct __libcpp_compute_min
1907a984708SDavid Chisnall{
191f9448bf3SDimitry Andric    static _LIBCPP_CONSTEXPR const _Tp value = _Tp(_Tp(1) << __digits);
1927a984708SDavid Chisnall};
1937a984708SDavid Chisnall
194f9448bf3SDimitry Andrictemplate <class _Tp, int __digits>
195f9448bf3SDimitry Andricstruct __libcpp_compute_min<_Tp, __digits, false>
1967a984708SDavid Chisnall{
197b03f91a8SDavid Chisnall    static _LIBCPP_CONSTEXPR const _Tp value = _Tp(0);
1987a984708SDavid Chisnall};
1997a984708SDavid Chisnall
2007a984708SDavid Chisnalltemplate <class _Tp>
2017a984708SDavid Chisnallclass __libcpp_numeric_limits<_Tp, true>
2027a984708SDavid Chisnall{
2037a984708SDavid Chisnallprotected:
2047a984708SDavid Chisnall    typedef _Tp type;
2057a984708SDavid Chisnall
206b03f91a8SDavid Chisnall    static _LIBCPP_CONSTEXPR const bool is_specialized = true;
2077a984708SDavid Chisnall
208b03f91a8SDavid Chisnall    static _LIBCPP_CONSTEXPR const bool is_signed = type(-1) < type(0);
209b03f91a8SDavid Chisnall    static _LIBCPP_CONSTEXPR const int  digits = static_cast<int>(sizeof(type) * __CHAR_BIT__ - is_signed);
210b03f91a8SDavid Chisnall    static _LIBCPP_CONSTEXPR const int  digits10 = digits * 3 / 10;
211b03f91a8SDavid Chisnall    static _LIBCPP_CONSTEXPR const int  max_digits10 = 0;
212b03f91a8SDavid Chisnall    static _LIBCPP_CONSTEXPR const type __min = __libcpp_compute_min<type, digits, is_signed>::value;
213b03f91a8SDavid Chisnall    static _LIBCPP_CONSTEXPR const type __max = is_signed ? type(type(~0) ^ __min) : type(~0);
214b03f91a8SDavid Chisnall    _LIBCPP_INLINE_VISIBILITY static _LIBCPP_CONSTEXPR type min() _NOEXCEPT {return __min;}
215b03f91a8SDavid Chisnall    _LIBCPP_INLINE_VISIBILITY static _LIBCPP_CONSTEXPR type max() _NOEXCEPT {return __max;}
216b03f91a8SDavid Chisnall    _LIBCPP_INLINE_VISIBILITY static _LIBCPP_CONSTEXPR type lowest() _NOEXCEPT {return min();}
2177a984708SDavid Chisnall
218b03f91a8SDavid Chisnall    static _LIBCPP_CONSTEXPR const bool is_integer = true;
219b03f91a8SDavid Chisnall    static _LIBCPP_CONSTEXPR const bool is_exact = true;
220b03f91a8SDavid Chisnall    static _LIBCPP_CONSTEXPR const int  radix = 2;
221b03f91a8SDavid Chisnall    _LIBCPP_INLINE_VISIBILITY static _LIBCPP_CONSTEXPR type epsilon() _NOEXCEPT {return type(0);}
222b03f91a8SDavid Chisnall    _LIBCPP_INLINE_VISIBILITY static _LIBCPP_CONSTEXPR type round_error() _NOEXCEPT {return type(0);}
2237a984708SDavid Chisnall
224b03f91a8SDavid Chisnall    static _LIBCPP_CONSTEXPR const int  min_exponent = 0;
225b03f91a8SDavid Chisnall    static _LIBCPP_CONSTEXPR const int  min_exponent10 = 0;
226b03f91a8SDavid Chisnall    static _LIBCPP_CONSTEXPR const int  max_exponent = 0;
227b03f91a8SDavid Chisnall    static _LIBCPP_CONSTEXPR const int  max_exponent10 = 0;
2287a984708SDavid Chisnall
229b03f91a8SDavid Chisnall    static _LIBCPP_CONSTEXPR const bool has_infinity = false;
230b03f91a8SDavid Chisnall    static _LIBCPP_CONSTEXPR const bool has_quiet_NaN = false;
231b03f91a8SDavid Chisnall    static _LIBCPP_CONSTEXPR const bool has_signaling_NaN = false;
232b03f91a8SDavid Chisnall    static _LIBCPP_CONSTEXPR const float_denorm_style has_denorm = denorm_absent;
233b03f91a8SDavid Chisnall    static _LIBCPP_CONSTEXPR const bool has_denorm_loss = false;
234b03f91a8SDavid Chisnall    _LIBCPP_INLINE_VISIBILITY static _LIBCPP_CONSTEXPR type infinity() _NOEXCEPT {return type(0);}
235b03f91a8SDavid Chisnall    _LIBCPP_INLINE_VISIBILITY static _LIBCPP_CONSTEXPR type quiet_NaN() _NOEXCEPT {return type(0);}
236b03f91a8SDavid Chisnall    _LIBCPP_INLINE_VISIBILITY static _LIBCPP_CONSTEXPR type signaling_NaN() _NOEXCEPT {return type(0);}
237b03f91a8SDavid Chisnall    _LIBCPP_INLINE_VISIBILITY static _LIBCPP_CONSTEXPR type denorm_min() _NOEXCEPT {return type(0);}
2387a984708SDavid Chisnall
239b03f91a8SDavid Chisnall    static _LIBCPP_CONSTEXPR const bool is_iec559 = false;
240b03f91a8SDavid Chisnall    static _LIBCPP_CONSTEXPR const bool is_bounded = true;
241d72607e9SDimitry Andric    static _LIBCPP_CONSTEXPR const bool is_modulo = !_VSTD::is_signed<_Tp>::value;
2427a984708SDavid Chisnall
2439729cf09SDimitry Andric#if defined(__i386__) || defined(__x86_64__) || defined(__pnacl__) || \
2449729cf09SDimitry Andric    defined(__wasm__)
245b03f91a8SDavid Chisnall    static _LIBCPP_CONSTEXPR const bool traps = true;
2467a984708SDavid Chisnall#else
247b03f91a8SDavid Chisnall    static _LIBCPP_CONSTEXPR const bool traps = false;
2487a984708SDavid Chisnall#endif
249b03f91a8SDavid Chisnall    static _LIBCPP_CONSTEXPR const bool tinyness_before = false;
250b03f91a8SDavid Chisnall    static _LIBCPP_CONSTEXPR const float_round_style round_style = round_toward_zero;
2517a984708SDavid Chisnall};
2527a984708SDavid Chisnall
2537a984708SDavid Chisnalltemplate <>
2547a984708SDavid Chisnallclass __libcpp_numeric_limits<bool, true>
2557a984708SDavid Chisnall{
2567a984708SDavid Chisnallprotected:
2577a984708SDavid Chisnall    typedef bool type;
2587a984708SDavid Chisnall
259b03f91a8SDavid Chisnall    static _LIBCPP_CONSTEXPR const bool is_specialized = true;
2607a984708SDavid Chisnall
261b03f91a8SDavid Chisnall    static _LIBCPP_CONSTEXPR const bool is_signed = false;
262b03f91a8SDavid Chisnall    static _LIBCPP_CONSTEXPR const int  digits = 1;
263b03f91a8SDavid Chisnall    static _LIBCPP_CONSTEXPR const int  digits10 = 0;
264b03f91a8SDavid Chisnall    static _LIBCPP_CONSTEXPR const int  max_digits10 = 0;
265b03f91a8SDavid Chisnall    static _LIBCPP_CONSTEXPR const type __min = false;
266b03f91a8SDavid Chisnall    static _LIBCPP_CONSTEXPR const type __max = true;
267b03f91a8SDavid Chisnall    _LIBCPP_INLINE_VISIBILITY static _LIBCPP_CONSTEXPR type min() _NOEXCEPT {return __min;}
268b03f91a8SDavid Chisnall    _LIBCPP_INLINE_VISIBILITY static _LIBCPP_CONSTEXPR type max() _NOEXCEPT {return __max;}
269b03f91a8SDavid Chisnall    _LIBCPP_INLINE_VISIBILITY static _LIBCPP_CONSTEXPR type lowest() _NOEXCEPT {return min();}
2707a984708SDavid Chisnall
271b03f91a8SDavid Chisnall    static _LIBCPP_CONSTEXPR const bool is_integer = true;
272b03f91a8SDavid Chisnall    static _LIBCPP_CONSTEXPR const bool is_exact = true;
273b03f91a8SDavid Chisnall    static _LIBCPP_CONSTEXPR const int  radix = 2;
274b03f91a8SDavid Chisnall    _LIBCPP_INLINE_VISIBILITY static _LIBCPP_CONSTEXPR type epsilon() _NOEXCEPT {return type(0);}
275b03f91a8SDavid Chisnall    _LIBCPP_INLINE_VISIBILITY static _LIBCPP_CONSTEXPR type round_error() _NOEXCEPT {return type(0);}
2767a984708SDavid Chisnall
277b03f91a8SDavid Chisnall    static _LIBCPP_CONSTEXPR const int  min_exponent = 0;
278b03f91a8SDavid Chisnall    static _LIBCPP_CONSTEXPR const int  min_exponent10 = 0;
279b03f91a8SDavid Chisnall    static _LIBCPP_CONSTEXPR const int  max_exponent = 0;
280b03f91a8SDavid Chisnall    static _LIBCPP_CONSTEXPR const int  max_exponent10 = 0;
2817a984708SDavid Chisnall
282b03f91a8SDavid Chisnall    static _LIBCPP_CONSTEXPR const bool has_infinity = false;
283b03f91a8SDavid Chisnall    static _LIBCPP_CONSTEXPR const bool has_quiet_NaN = false;
284b03f91a8SDavid Chisnall    static _LIBCPP_CONSTEXPR const bool has_signaling_NaN = false;
285b03f91a8SDavid Chisnall    static _LIBCPP_CONSTEXPR const float_denorm_style has_denorm = denorm_absent;
286b03f91a8SDavid Chisnall    static _LIBCPP_CONSTEXPR const bool has_denorm_loss = false;
287b03f91a8SDavid Chisnall    _LIBCPP_INLINE_VISIBILITY static _LIBCPP_CONSTEXPR type infinity() _NOEXCEPT {return type(0);}
288b03f91a8SDavid Chisnall    _LIBCPP_INLINE_VISIBILITY static _LIBCPP_CONSTEXPR type quiet_NaN() _NOEXCEPT {return type(0);}
289b03f91a8SDavid Chisnall    _LIBCPP_INLINE_VISIBILITY static _LIBCPP_CONSTEXPR type signaling_NaN() _NOEXCEPT {return type(0);}
290b03f91a8SDavid Chisnall    _LIBCPP_INLINE_VISIBILITY static _LIBCPP_CONSTEXPR type denorm_min() _NOEXCEPT {return type(0);}
2917a984708SDavid Chisnall
292b03f91a8SDavid Chisnall    static _LIBCPP_CONSTEXPR const bool is_iec559 = false;
293b03f91a8SDavid Chisnall    static _LIBCPP_CONSTEXPR const bool is_bounded = true;
294b03f91a8SDavid Chisnall    static _LIBCPP_CONSTEXPR const bool is_modulo = false;
2957a984708SDavid Chisnall
296b03f91a8SDavid Chisnall    static _LIBCPP_CONSTEXPR const bool traps = false;
297b03f91a8SDavid Chisnall    static _LIBCPP_CONSTEXPR const bool tinyness_before = false;
298b03f91a8SDavid Chisnall    static _LIBCPP_CONSTEXPR const float_round_style round_style = round_toward_zero;
2997a984708SDavid Chisnall};
3007a984708SDavid Chisnall
3017a984708SDavid Chisnalltemplate <>
3027a984708SDavid Chisnallclass __libcpp_numeric_limits<float, true>
3037a984708SDavid Chisnall{
3047a984708SDavid Chisnallprotected:
3057a984708SDavid Chisnall    typedef float type;
3067a984708SDavid Chisnall
307b03f91a8SDavid Chisnall    static _LIBCPP_CONSTEXPR const bool is_specialized = true;
3087a984708SDavid Chisnall
309b03f91a8SDavid Chisnall    static _LIBCPP_CONSTEXPR const bool is_signed = true;
310b03f91a8SDavid Chisnall    static _LIBCPP_CONSTEXPR const int  digits = __FLT_MANT_DIG__;
311b03f91a8SDavid Chisnall    static _LIBCPP_CONSTEXPR const int  digits10 = __FLT_DIG__;
312aed8d94eSDimitry Andric    static _LIBCPP_CONSTEXPR const int  max_digits10 = 2+(digits * 30103l)/100000l;
313b03f91a8SDavid Chisnall    _LIBCPP_INLINE_VISIBILITY static _LIBCPP_CONSTEXPR type min() _NOEXCEPT {return __FLT_MIN__;}
314b03f91a8SDavid Chisnall    _LIBCPP_INLINE_VISIBILITY static _LIBCPP_CONSTEXPR type max() _NOEXCEPT {return __FLT_MAX__;}
315b03f91a8SDavid Chisnall    _LIBCPP_INLINE_VISIBILITY static _LIBCPP_CONSTEXPR type lowest() _NOEXCEPT {return -max();}
3167a984708SDavid Chisnall
317b03f91a8SDavid Chisnall    static _LIBCPP_CONSTEXPR const bool is_integer = false;
318b03f91a8SDavid Chisnall    static _LIBCPP_CONSTEXPR const bool is_exact = false;
319b03f91a8SDavid Chisnall    static _LIBCPP_CONSTEXPR const int  radix = __FLT_RADIX__;
320b03f91a8SDavid Chisnall    _LIBCPP_INLINE_VISIBILITY static _LIBCPP_CONSTEXPR type epsilon() _NOEXCEPT {return __FLT_EPSILON__;}
321b03f91a8SDavid Chisnall    _LIBCPP_INLINE_VISIBILITY static _LIBCPP_CONSTEXPR type round_error() _NOEXCEPT {return 0.5F;}
3227a984708SDavid Chisnall
323b03f91a8SDavid Chisnall    static _LIBCPP_CONSTEXPR const int  min_exponent = __FLT_MIN_EXP__;
324b03f91a8SDavid Chisnall    static _LIBCPP_CONSTEXPR const int  min_exponent10 = __FLT_MIN_10_EXP__;
325b03f91a8SDavid Chisnall    static _LIBCPP_CONSTEXPR const int  max_exponent = __FLT_MAX_EXP__;
326b03f91a8SDavid Chisnall    static _LIBCPP_CONSTEXPR const int  max_exponent10 = __FLT_MAX_10_EXP__;
3277a984708SDavid Chisnall
328b03f91a8SDavid Chisnall    static _LIBCPP_CONSTEXPR const bool has_infinity = true;
329b03f91a8SDavid Chisnall    static _LIBCPP_CONSTEXPR const bool has_quiet_NaN = true;
330b03f91a8SDavid Chisnall    static _LIBCPP_CONSTEXPR const bool has_signaling_NaN = true;
331b03f91a8SDavid Chisnall    static _LIBCPP_CONSTEXPR const float_denorm_style has_denorm = denorm_present;
332b03f91a8SDavid Chisnall    static _LIBCPP_CONSTEXPR const bool has_denorm_loss = false;
333b03f91a8SDavid Chisnall    _LIBCPP_INLINE_VISIBILITY static _LIBCPP_CONSTEXPR type infinity() _NOEXCEPT {return __builtin_huge_valf();}
334b03f91a8SDavid Chisnall    _LIBCPP_INLINE_VISIBILITY static _LIBCPP_CONSTEXPR type quiet_NaN() _NOEXCEPT {return __builtin_nanf("");}
335b03f91a8SDavid Chisnall    _LIBCPP_INLINE_VISIBILITY static _LIBCPP_CONSTEXPR type signaling_NaN() _NOEXCEPT {return __builtin_nansf("");}
336b03f91a8SDavid Chisnall    _LIBCPP_INLINE_VISIBILITY static _LIBCPP_CONSTEXPR type denorm_min() _NOEXCEPT {return __FLT_DENORM_MIN__;}
3377a984708SDavid Chisnall
338b03f91a8SDavid Chisnall    static _LIBCPP_CONSTEXPR const bool is_iec559 = true;
339b03f91a8SDavid Chisnall    static _LIBCPP_CONSTEXPR const bool is_bounded = true;
340b03f91a8SDavid Chisnall    static _LIBCPP_CONSTEXPR const bool is_modulo = false;
3417a984708SDavid Chisnall
342b03f91a8SDavid Chisnall    static _LIBCPP_CONSTEXPR const bool traps = false;
343b03f91a8SDavid Chisnall    static _LIBCPP_CONSTEXPR const bool tinyness_before = false;
344b03f91a8SDavid Chisnall    static _LIBCPP_CONSTEXPR const float_round_style round_style = round_to_nearest;
3457a984708SDavid Chisnall};
3467a984708SDavid Chisnall
3477a984708SDavid Chisnalltemplate <>
3487a984708SDavid Chisnallclass __libcpp_numeric_limits<double, true>
3497a984708SDavid Chisnall{
3507a984708SDavid Chisnallprotected:
3517a984708SDavid Chisnall    typedef double type;
3527a984708SDavid Chisnall
353b03f91a8SDavid Chisnall    static _LIBCPP_CONSTEXPR const bool is_specialized = true;
3547a984708SDavid Chisnall
355b03f91a8SDavid Chisnall    static _LIBCPP_CONSTEXPR const bool is_signed = true;
356b03f91a8SDavid Chisnall    static _LIBCPP_CONSTEXPR const int  digits = __DBL_MANT_DIG__;
357b03f91a8SDavid Chisnall    static _LIBCPP_CONSTEXPR const int  digits10 = __DBL_DIG__;
358aed8d94eSDimitry Andric    static _LIBCPP_CONSTEXPR const int  max_digits10 = 2+(digits * 30103l)/100000l;
359b03f91a8SDavid Chisnall    _LIBCPP_INLINE_VISIBILITY static _LIBCPP_CONSTEXPR type min() _NOEXCEPT {return __DBL_MIN__;}
360b03f91a8SDavid Chisnall    _LIBCPP_INLINE_VISIBILITY static _LIBCPP_CONSTEXPR type max() _NOEXCEPT {return __DBL_MAX__;}
361b03f91a8SDavid Chisnall    _LIBCPP_INLINE_VISIBILITY static _LIBCPP_CONSTEXPR type lowest() _NOEXCEPT {return -max();}
3627a984708SDavid Chisnall
363b03f91a8SDavid Chisnall    static _LIBCPP_CONSTEXPR const bool is_integer = false;
364b03f91a8SDavid Chisnall    static _LIBCPP_CONSTEXPR const bool is_exact = false;
365b03f91a8SDavid Chisnall    static _LIBCPP_CONSTEXPR const int  radix = __FLT_RADIX__;
366b03f91a8SDavid Chisnall    _LIBCPP_INLINE_VISIBILITY static _LIBCPP_CONSTEXPR type epsilon() _NOEXCEPT {return __DBL_EPSILON__;}
367b03f91a8SDavid Chisnall    _LIBCPP_INLINE_VISIBILITY static _LIBCPP_CONSTEXPR type round_error() _NOEXCEPT {return 0.5;}
3687a984708SDavid Chisnall
369b03f91a8SDavid Chisnall    static _LIBCPP_CONSTEXPR const int  min_exponent = __DBL_MIN_EXP__;
370b03f91a8SDavid Chisnall    static _LIBCPP_CONSTEXPR const int  min_exponent10 = __DBL_MIN_10_EXP__;
371b03f91a8SDavid Chisnall    static _LIBCPP_CONSTEXPR const int  max_exponent = __DBL_MAX_EXP__;
372b03f91a8SDavid Chisnall    static _LIBCPP_CONSTEXPR const int  max_exponent10 = __DBL_MAX_10_EXP__;
3737a984708SDavid Chisnall
374b03f91a8SDavid Chisnall    static _LIBCPP_CONSTEXPR const bool has_infinity = true;
375b03f91a8SDavid Chisnall    static _LIBCPP_CONSTEXPR const bool has_quiet_NaN = true;
376b03f91a8SDavid Chisnall    static _LIBCPP_CONSTEXPR const bool has_signaling_NaN = true;
377b03f91a8SDavid Chisnall    static _LIBCPP_CONSTEXPR const float_denorm_style has_denorm = denorm_present;
378b03f91a8SDavid Chisnall    static _LIBCPP_CONSTEXPR const bool has_denorm_loss = false;
379b03f91a8SDavid Chisnall    _LIBCPP_INLINE_VISIBILITY static _LIBCPP_CONSTEXPR type infinity() _NOEXCEPT {return __builtin_huge_val();}
380b03f91a8SDavid Chisnall    _LIBCPP_INLINE_VISIBILITY static _LIBCPP_CONSTEXPR type quiet_NaN() _NOEXCEPT {return __builtin_nan("");}
381b03f91a8SDavid Chisnall    _LIBCPP_INLINE_VISIBILITY static _LIBCPP_CONSTEXPR type signaling_NaN() _NOEXCEPT {return __builtin_nans("");}
382b03f91a8SDavid Chisnall    _LIBCPP_INLINE_VISIBILITY static _LIBCPP_CONSTEXPR type denorm_min() _NOEXCEPT {return __DBL_DENORM_MIN__;}
3837a984708SDavid Chisnall
384b03f91a8SDavid Chisnall    static _LIBCPP_CONSTEXPR const bool is_iec559 = true;
385b03f91a8SDavid Chisnall    static _LIBCPP_CONSTEXPR const bool is_bounded = true;
386b03f91a8SDavid Chisnall    static _LIBCPP_CONSTEXPR const bool is_modulo = false;
3877a984708SDavid Chisnall
388b03f91a8SDavid Chisnall    static _LIBCPP_CONSTEXPR const bool traps = false;
389b03f91a8SDavid Chisnall    static _LIBCPP_CONSTEXPR const bool tinyness_before = false;
390b03f91a8SDavid Chisnall    static _LIBCPP_CONSTEXPR const float_round_style round_style = round_to_nearest;
3917a984708SDavid Chisnall};
3927a984708SDavid Chisnall
3937a984708SDavid Chisnalltemplate <>
3947a984708SDavid Chisnallclass __libcpp_numeric_limits<long double, true>
3957a984708SDavid Chisnall{
3967a984708SDavid Chisnallprotected:
3977a984708SDavid Chisnall    typedef long double type;
3987a984708SDavid Chisnall
399b03f91a8SDavid Chisnall    static _LIBCPP_CONSTEXPR const bool is_specialized = true;
4007a984708SDavid Chisnall
401b03f91a8SDavid Chisnall    static _LIBCPP_CONSTEXPR const bool is_signed = true;
402b03f91a8SDavid Chisnall    static _LIBCPP_CONSTEXPR const int  digits = __LDBL_MANT_DIG__;
403b03f91a8SDavid Chisnall    static _LIBCPP_CONSTEXPR const int  digits10 = __LDBL_DIG__;
404aed8d94eSDimitry Andric    static _LIBCPP_CONSTEXPR const int  max_digits10 = 2+(digits * 30103l)/100000l;
405b03f91a8SDavid Chisnall    _LIBCPP_INLINE_VISIBILITY static _LIBCPP_CONSTEXPR type min() _NOEXCEPT {return __LDBL_MIN__;}
406b03f91a8SDavid Chisnall    _LIBCPP_INLINE_VISIBILITY static _LIBCPP_CONSTEXPR type max() _NOEXCEPT {return __LDBL_MAX__;}
407b03f91a8SDavid Chisnall    _LIBCPP_INLINE_VISIBILITY static _LIBCPP_CONSTEXPR type lowest() _NOEXCEPT {return -max();}
4087a984708SDavid Chisnall
409b03f91a8SDavid Chisnall    static _LIBCPP_CONSTEXPR const bool is_integer = false;
410b03f91a8SDavid Chisnall    static _LIBCPP_CONSTEXPR const bool is_exact = false;
411b03f91a8SDavid Chisnall    static _LIBCPP_CONSTEXPR const int  radix = __FLT_RADIX__;
412b03f91a8SDavid Chisnall    _LIBCPP_INLINE_VISIBILITY static _LIBCPP_CONSTEXPR type epsilon() _NOEXCEPT {return __LDBL_EPSILON__;}
413b03f91a8SDavid Chisnall    _LIBCPP_INLINE_VISIBILITY static _LIBCPP_CONSTEXPR type round_error() _NOEXCEPT {return 0.5;}
4147a984708SDavid Chisnall
415b03f91a8SDavid Chisnall    static _LIBCPP_CONSTEXPR const int  min_exponent = __LDBL_MIN_EXP__;
416b03f91a8SDavid Chisnall    static _LIBCPP_CONSTEXPR const int  min_exponent10 = __LDBL_MIN_10_EXP__;
417b03f91a8SDavid Chisnall    static _LIBCPP_CONSTEXPR const int  max_exponent = __LDBL_MAX_EXP__;
418b03f91a8SDavid Chisnall    static _LIBCPP_CONSTEXPR const int  max_exponent10 = __LDBL_MAX_10_EXP__;
4197a984708SDavid Chisnall
420b03f91a8SDavid Chisnall    static _LIBCPP_CONSTEXPR const bool has_infinity = true;
421b03f91a8SDavid Chisnall    static _LIBCPP_CONSTEXPR const bool has_quiet_NaN = true;
422b03f91a8SDavid Chisnall    static _LIBCPP_CONSTEXPR const bool has_signaling_NaN = true;
423b03f91a8SDavid Chisnall    static _LIBCPP_CONSTEXPR const float_denorm_style has_denorm = denorm_present;
424b03f91a8SDavid Chisnall    static _LIBCPP_CONSTEXPR const bool has_denorm_loss = false;
425b03f91a8SDavid Chisnall    _LIBCPP_INLINE_VISIBILITY static _LIBCPP_CONSTEXPR type infinity() _NOEXCEPT {return __builtin_huge_vall();}
426b03f91a8SDavid Chisnall    _LIBCPP_INLINE_VISIBILITY static _LIBCPP_CONSTEXPR type quiet_NaN() _NOEXCEPT {return __builtin_nanl("");}
427b03f91a8SDavid Chisnall    _LIBCPP_INLINE_VISIBILITY static _LIBCPP_CONSTEXPR type signaling_NaN() _NOEXCEPT {return __builtin_nansl("");}
428b03f91a8SDavid Chisnall    _LIBCPP_INLINE_VISIBILITY static _LIBCPP_CONSTEXPR type denorm_min() _NOEXCEPT {return __LDBL_DENORM_MIN__;}
4297a984708SDavid Chisnall
4307a984708SDavid Chisnall#if (defined(__ppc__) || defined(__ppc64__))
431b03f91a8SDavid Chisnall    static _LIBCPP_CONSTEXPR const bool is_iec559 = false;
4327a984708SDavid Chisnall#else
433b03f91a8SDavid Chisnall    static _LIBCPP_CONSTEXPR const bool is_iec559 = true;
4347a984708SDavid Chisnall#endif
435b03f91a8SDavid Chisnall    static _LIBCPP_CONSTEXPR const bool is_bounded = true;
436b03f91a8SDavid Chisnall    static _LIBCPP_CONSTEXPR const bool is_modulo = false;
4377a984708SDavid Chisnall
438b03f91a8SDavid Chisnall    static _LIBCPP_CONSTEXPR const bool traps = false;
439b03f91a8SDavid Chisnall    static _LIBCPP_CONSTEXPR const bool tinyness_before = false;
440b03f91a8SDavid Chisnall    static _LIBCPP_CONSTEXPR const float_round_style round_style = round_to_nearest;
4417a984708SDavid Chisnall};
4427a984708SDavid Chisnall
4437a984708SDavid Chisnalltemplate <class _Tp>
444aed8d94eSDimitry Andricclass _LIBCPP_TEMPLATE_VIS numeric_limits
4457a984708SDavid Chisnall    : private __libcpp_numeric_limits<typename remove_cv<_Tp>::type>
4467a984708SDavid Chisnall{
4477a984708SDavid Chisnall    typedef __libcpp_numeric_limits<typename remove_cv<_Tp>::type> __base;
4487a984708SDavid Chisnall    typedef typename __base::type type;
4497a984708SDavid Chisnallpublic:
450b03f91a8SDavid Chisnall    static _LIBCPP_CONSTEXPR const bool is_specialized = __base::is_specialized;
451b03f91a8SDavid Chisnall    _LIBCPP_INLINE_VISIBILITY static _LIBCPP_CONSTEXPR type min() _NOEXCEPT {return __base::min();}
452b03f91a8SDavid Chisnall    _LIBCPP_INLINE_VISIBILITY static _LIBCPP_CONSTEXPR type max() _NOEXCEPT {return __base::max();}
453b03f91a8SDavid Chisnall    _LIBCPP_INLINE_VISIBILITY static _LIBCPP_CONSTEXPR type lowest() _NOEXCEPT {return __base::lowest();}
4547a984708SDavid Chisnall
455b03f91a8SDavid Chisnall    static _LIBCPP_CONSTEXPR const int  digits = __base::digits;
456b03f91a8SDavid Chisnall    static _LIBCPP_CONSTEXPR const int  digits10 = __base::digits10;
457b03f91a8SDavid Chisnall    static _LIBCPP_CONSTEXPR const int  max_digits10 = __base::max_digits10;
458b03f91a8SDavid Chisnall    static _LIBCPP_CONSTEXPR const bool is_signed = __base::is_signed;
459b03f91a8SDavid Chisnall    static _LIBCPP_CONSTEXPR const bool is_integer = __base::is_integer;
460b03f91a8SDavid Chisnall    static _LIBCPP_CONSTEXPR const bool is_exact = __base::is_exact;
461b03f91a8SDavid Chisnall    static _LIBCPP_CONSTEXPR const int  radix = __base::radix;
462b03f91a8SDavid Chisnall    _LIBCPP_INLINE_VISIBILITY static _LIBCPP_CONSTEXPR type epsilon() _NOEXCEPT {return __base::epsilon();}
463b03f91a8SDavid Chisnall    _LIBCPP_INLINE_VISIBILITY static _LIBCPP_CONSTEXPR type round_error() _NOEXCEPT {return __base::round_error();}
4647a984708SDavid Chisnall
465b03f91a8SDavid Chisnall    static _LIBCPP_CONSTEXPR const int  min_exponent = __base::min_exponent;
466b03f91a8SDavid Chisnall    static _LIBCPP_CONSTEXPR const int  min_exponent10 = __base::min_exponent10;
467b03f91a8SDavid Chisnall    static _LIBCPP_CONSTEXPR const int  max_exponent = __base::max_exponent;
468b03f91a8SDavid Chisnall    static _LIBCPP_CONSTEXPR const int  max_exponent10 = __base::max_exponent10;
4697a984708SDavid Chisnall
470b03f91a8SDavid Chisnall    static _LIBCPP_CONSTEXPR const bool has_infinity = __base::has_infinity;
471b03f91a8SDavid Chisnall    static _LIBCPP_CONSTEXPR const bool has_quiet_NaN = __base::has_quiet_NaN;
472b03f91a8SDavid Chisnall    static _LIBCPP_CONSTEXPR const bool has_signaling_NaN = __base::has_signaling_NaN;
473b03f91a8SDavid Chisnall    static _LIBCPP_CONSTEXPR const float_denorm_style has_denorm = __base::has_denorm;
474b03f91a8SDavid Chisnall    static _LIBCPP_CONSTEXPR const bool has_denorm_loss = __base::has_denorm_loss;
475b03f91a8SDavid Chisnall    _LIBCPP_INLINE_VISIBILITY static _LIBCPP_CONSTEXPR type infinity() _NOEXCEPT {return __base::infinity();}
476b03f91a8SDavid Chisnall    _LIBCPP_INLINE_VISIBILITY static _LIBCPP_CONSTEXPR type quiet_NaN() _NOEXCEPT {return __base::quiet_NaN();}
477b03f91a8SDavid Chisnall    _LIBCPP_INLINE_VISIBILITY static _LIBCPP_CONSTEXPR type signaling_NaN() _NOEXCEPT {return __base::signaling_NaN();}
478b03f91a8SDavid Chisnall    _LIBCPP_INLINE_VISIBILITY static _LIBCPP_CONSTEXPR type denorm_min() _NOEXCEPT {return __base::denorm_min();}
4797a984708SDavid Chisnall
480b03f91a8SDavid Chisnall    static _LIBCPP_CONSTEXPR const bool is_iec559 = __base::is_iec559;
481b03f91a8SDavid Chisnall    static _LIBCPP_CONSTEXPR const bool is_bounded = __base::is_bounded;
482b03f91a8SDavid Chisnall    static _LIBCPP_CONSTEXPR const bool is_modulo = __base::is_modulo;
4837a984708SDavid Chisnall
484b03f91a8SDavid Chisnall    static _LIBCPP_CONSTEXPR const bool traps = __base::traps;
485b03f91a8SDavid Chisnall    static _LIBCPP_CONSTEXPR const bool tinyness_before = __base::tinyness_before;
486b03f91a8SDavid Chisnall    static _LIBCPP_CONSTEXPR const float_round_style round_style = __base::round_style;
4877a984708SDavid Chisnall};
4887a984708SDavid Chisnall
4897a984708SDavid Chisnalltemplate <class _Tp>
490cfdf2879SDavid Chisnall    _LIBCPP_CONSTEXPR const bool numeric_limits<_Tp>::is_specialized;
491cfdf2879SDavid Chisnalltemplate <class _Tp>
492cfdf2879SDavid Chisnall    _LIBCPP_CONSTEXPR const int numeric_limits<_Tp>::digits;
493cfdf2879SDavid Chisnalltemplate <class _Tp>
494cfdf2879SDavid Chisnall    _LIBCPP_CONSTEXPR const int numeric_limits<_Tp>::digits10;
495cfdf2879SDavid Chisnalltemplate <class _Tp>
496cfdf2879SDavid Chisnall    _LIBCPP_CONSTEXPR const int numeric_limits<_Tp>::max_digits10;
497cfdf2879SDavid Chisnalltemplate <class _Tp>
498cfdf2879SDavid Chisnall    _LIBCPP_CONSTEXPR const bool numeric_limits<_Tp>::is_signed;
499cfdf2879SDavid Chisnalltemplate <class _Tp>
500cfdf2879SDavid Chisnall    _LIBCPP_CONSTEXPR const bool numeric_limits<_Tp>::is_integer;
501cfdf2879SDavid Chisnalltemplate <class _Tp>
502cfdf2879SDavid Chisnall    _LIBCPP_CONSTEXPR const bool numeric_limits<_Tp>::is_exact;
503cfdf2879SDavid Chisnalltemplate <class _Tp>
504cfdf2879SDavid Chisnall    _LIBCPP_CONSTEXPR const int numeric_limits<_Tp>::radix;
505cfdf2879SDavid Chisnalltemplate <class _Tp>
506cfdf2879SDavid Chisnall    _LIBCPP_CONSTEXPR const int numeric_limits<_Tp>::min_exponent;
507cfdf2879SDavid Chisnalltemplate <class _Tp>
508cfdf2879SDavid Chisnall    _LIBCPP_CONSTEXPR const int numeric_limits<_Tp>::min_exponent10;
509cfdf2879SDavid Chisnalltemplate <class _Tp>
510cfdf2879SDavid Chisnall    _LIBCPP_CONSTEXPR const int numeric_limits<_Tp>::max_exponent;
511cfdf2879SDavid Chisnalltemplate <class _Tp>
512cfdf2879SDavid Chisnall    _LIBCPP_CONSTEXPR const int numeric_limits<_Tp>::max_exponent10;
513cfdf2879SDavid Chisnalltemplate <class _Tp>
514cfdf2879SDavid Chisnall    _LIBCPP_CONSTEXPR const bool numeric_limits<_Tp>::has_infinity;
515cfdf2879SDavid Chisnalltemplate <class _Tp>
516cfdf2879SDavid Chisnall    _LIBCPP_CONSTEXPR const bool numeric_limits<_Tp>::has_quiet_NaN;
517cfdf2879SDavid Chisnalltemplate <class _Tp>
518cfdf2879SDavid Chisnall    _LIBCPP_CONSTEXPR const bool numeric_limits<_Tp>::has_signaling_NaN;
519cfdf2879SDavid Chisnalltemplate <class _Tp>
520cfdf2879SDavid Chisnall    _LIBCPP_CONSTEXPR const float_denorm_style numeric_limits<_Tp>::has_denorm;
521cfdf2879SDavid Chisnalltemplate <class _Tp>
522cfdf2879SDavid Chisnall    _LIBCPP_CONSTEXPR const bool numeric_limits<_Tp>::has_denorm_loss;
523cfdf2879SDavid Chisnalltemplate <class _Tp>
524cfdf2879SDavid Chisnall    _LIBCPP_CONSTEXPR const bool numeric_limits<_Tp>::is_iec559;
525cfdf2879SDavid Chisnalltemplate <class _Tp>
526cfdf2879SDavid Chisnall    _LIBCPP_CONSTEXPR const bool numeric_limits<_Tp>::is_bounded;
527cfdf2879SDavid Chisnalltemplate <class _Tp>
528cfdf2879SDavid Chisnall    _LIBCPP_CONSTEXPR const bool numeric_limits<_Tp>::is_modulo;
529cfdf2879SDavid Chisnalltemplate <class _Tp>
530cfdf2879SDavid Chisnall    _LIBCPP_CONSTEXPR const bool numeric_limits<_Tp>::traps;
531cfdf2879SDavid Chisnalltemplate <class _Tp>
532cfdf2879SDavid Chisnall    _LIBCPP_CONSTEXPR const bool numeric_limits<_Tp>::tinyness_before;
533cfdf2879SDavid Chisnalltemplate <class _Tp>
534cfdf2879SDavid Chisnall    _LIBCPP_CONSTEXPR const float_round_style numeric_limits<_Tp>::round_style;
535cfdf2879SDavid Chisnall
536cfdf2879SDavid Chisnalltemplate <class _Tp>
537aed8d94eSDimitry Andricclass _LIBCPP_TEMPLATE_VIS numeric_limits<const _Tp>
5387a984708SDavid Chisnall    : private numeric_limits<_Tp>
5397a984708SDavid Chisnall{
5407a984708SDavid Chisnall    typedef numeric_limits<_Tp> __base;
5417a984708SDavid Chisnall    typedef _Tp type;
5427a984708SDavid Chisnallpublic:
543b03f91a8SDavid Chisnall    static _LIBCPP_CONSTEXPR const bool is_specialized = __base::is_specialized;
544b03f91a8SDavid Chisnall    _LIBCPP_INLINE_VISIBILITY static _LIBCPP_CONSTEXPR type min() _NOEXCEPT {return __base::min();}
545b03f91a8SDavid Chisnall    _LIBCPP_INLINE_VISIBILITY static _LIBCPP_CONSTEXPR type max() _NOEXCEPT {return __base::max();}
546b03f91a8SDavid Chisnall    _LIBCPP_INLINE_VISIBILITY static _LIBCPP_CONSTEXPR type lowest() _NOEXCEPT {return __base::lowest();}
5477a984708SDavid Chisnall
548b03f91a8SDavid Chisnall    static _LIBCPP_CONSTEXPR const int  digits = __base::digits;
549b03f91a8SDavid Chisnall    static _LIBCPP_CONSTEXPR const int  digits10 = __base::digits10;
550b03f91a8SDavid Chisnall    static _LIBCPP_CONSTEXPR const int  max_digits10 = __base::max_digits10;
551b03f91a8SDavid Chisnall    static _LIBCPP_CONSTEXPR const bool is_signed = __base::is_signed;
552b03f91a8SDavid Chisnall    static _LIBCPP_CONSTEXPR const bool is_integer = __base::is_integer;
553b03f91a8SDavid Chisnall    static _LIBCPP_CONSTEXPR const bool is_exact = __base::is_exact;
554b03f91a8SDavid Chisnall    static _LIBCPP_CONSTEXPR const int  radix = __base::radix;
555b03f91a8SDavid Chisnall    _LIBCPP_INLINE_VISIBILITY static _LIBCPP_CONSTEXPR type epsilon() _NOEXCEPT {return __base::epsilon();}
556b03f91a8SDavid Chisnall    _LIBCPP_INLINE_VISIBILITY static _LIBCPP_CONSTEXPR type round_error() _NOEXCEPT {return __base::round_error();}
5577a984708SDavid Chisnall
558b03f91a8SDavid Chisnall    static _LIBCPP_CONSTEXPR const int  min_exponent = __base::min_exponent;
559b03f91a8SDavid Chisnall    static _LIBCPP_CONSTEXPR const int  min_exponent10 = __base::min_exponent10;
560b03f91a8SDavid Chisnall    static _LIBCPP_CONSTEXPR const int  max_exponent = __base::max_exponent;
561b03f91a8SDavid Chisnall    static _LIBCPP_CONSTEXPR const int  max_exponent10 = __base::max_exponent10;
5627a984708SDavid Chisnall
563b03f91a8SDavid Chisnall    static _LIBCPP_CONSTEXPR const bool has_infinity = __base::has_infinity;
564b03f91a8SDavid Chisnall    static _LIBCPP_CONSTEXPR const bool has_quiet_NaN = __base::has_quiet_NaN;
565b03f91a8SDavid Chisnall    static _LIBCPP_CONSTEXPR const bool has_signaling_NaN = __base::has_signaling_NaN;
566b03f91a8SDavid Chisnall    static _LIBCPP_CONSTEXPR const float_denorm_style has_denorm = __base::has_denorm;
567b03f91a8SDavid Chisnall    static _LIBCPP_CONSTEXPR const bool has_denorm_loss = __base::has_denorm_loss;
568b03f91a8SDavid Chisnall    _LIBCPP_INLINE_VISIBILITY static _LIBCPP_CONSTEXPR type infinity() _NOEXCEPT {return __base::infinity();}
569b03f91a8SDavid Chisnall    _LIBCPP_INLINE_VISIBILITY static _LIBCPP_CONSTEXPR type quiet_NaN() _NOEXCEPT {return __base::quiet_NaN();}
570b03f91a8SDavid Chisnall    _LIBCPP_INLINE_VISIBILITY static _LIBCPP_CONSTEXPR type signaling_NaN() _NOEXCEPT {return __base::signaling_NaN();}
571b03f91a8SDavid Chisnall    _LIBCPP_INLINE_VISIBILITY static _LIBCPP_CONSTEXPR type denorm_min() _NOEXCEPT {return __base::denorm_min();}
5727a984708SDavid Chisnall
573b03f91a8SDavid Chisnall    static _LIBCPP_CONSTEXPR const bool is_iec559 = __base::is_iec559;
574b03f91a8SDavid Chisnall    static _LIBCPP_CONSTEXPR const bool is_bounded = __base::is_bounded;
575b03f91a8SDavid Chisnall    static _LIBCPP_CONSTEXPR const bool is_modulo = __base::is_modulo;
5767a984708SDavid Chisnall
577b03f91a8SDavid Chisnall    static _LIBCPP_CONSTEXPR const bool traps = __base::traps;
578b03f91a8SDavid Chisnall    static _LIBCPP_CONSTEXPR const bool tinyness_before = __base::tinyness_before;
579b03f91a8SDavid Chisnall    static _LIBCPP_CONSTEXPR const float_round_style round_style = __base::round_style;
5807a984708SDavid Chisnall};
5817a984708SDavid Chisnall
5827a984708SDavid Chisnalltemplate <class _Tp>
583cfdf2879SDavid Chisnall    _LIBCPP_CONSTEXPR const bool numeric_limits<const _Tp>::is_specialized;
584cfdf2879SDavid Chisnalltemplate <class _Tp>
585cfdf2879SDavid Chisnall    _LIBCPP_CONSTEXPR const int numeric_limits<const _Tp>::digits;
586cfdf2879SDavid Chisnalltemplate <class _Tp>
587cfdf2879SDavid Chisnall    _LIBCPP_CONSTEXPR const int numeric_limits<const _Tp>::digits10;
588cfdf2879SDavid Chisnalltemplate <class _Tp>
589cfdf2879SDavid Chisnall    _LIBCPP_CONSTEXPR const int numeric_limits<const _Tp>::max_digits10;
590cfdf2879SDavid Chisnalltemplate <class _Tp>
591cfdf2879SDavid Chisnall    _LIBCPP_CONSTEXPR const bool numeric_limits<const _Tp>::is_signed;
592cfdf2879SDavid Chisnalltemplate <class _Tp>
593cfdf2879SDavid Chisnall    _LIBCPP_CONSTEXPR const bool numeric_limits<const _Tp>::is_integer;
594cfdf2879SDavid Chisnalltemplate <class _Tp>
595cfdf2879SDavid Chisnall    _LIBCPP_CONSTEXPR const bool numeric_limits<const _Tp>::is_exact;
596cfdf2879SDavid Chisnalltemplate <class _Tp>
597cfdf2879SDavid Chisnall    _LIBCPP_CONSTEXPR const int numeric_limits<const _Tp>::radix;
598cfdf2879SDavid Chisnalltemplate <class _Tp>
599cfdf2879SDavid Chisnall    _LIBCPP_CONSTEXPR const int numeric_limits<const _Tp>::min_exponent;
600cfdf2879SDavid Chisnalltemplate <class _Tp>
601cfdf2879SDavid Chisnall    _LIBCPP_CONSTEXPR const int numeric_limits<const _Tp>::min_exponent10;
602cfdf2879SDavid Chisnalltemplate <class _Tp>
603cfdf2879SDavid Chisnall    _LIBCPP_CONSTEXPR const int numeric_limits<const _Tp>::max_exponent;
604cfdf2879SDavid Chisnalltemplate <class _Tp>
605cfdf2879SDavid Chisnall    _LIBCPP_CONSTEXPR const int numeric_limits<const _Tp>::max_exponent10;
606cfdf2879SDavid Chisnalltemplate <class _Tp>
607cfdf2879SDavid Chisnall    _LIBCPP_CONSTEXPR const bool numeric_limits<const _Tp>::has_infinity;
608cfdf2879SDavid Chisnalltemplate <class _Tp>
609cfdf2879SDavid Chisnall    _LIBCPP_CONSTEXPR const bool numeric_limits<const _Tp>::has_quiet_NaN;
610cfdf2879SDavid Chisnalltemplate <class _Tp>
611cfdf2879SDavid Chisnall    _LIBCPP_CONSTEXPR const bool numeric_limits<const _Tp>::has_signaling_NaN;
612cfdf2879SDavid Chisnalltemplate <class _Tp>
613cfdf2879SDavid Chisnall    _LIBCPP_CONSTEXPR const float_denorm_style numeric_limits<const _Tp>::has_denorm;
614cfdf2879SDavid Chisnalltemplate <class _Tp>
615cfdf2879SDavid Chisnall    _LIBCPP_CONSTEXPR const bool numeric_limits<const _Tp>::has_denorm_loss;
616cfdf2879SDavid Chisnalltemplate <class _Tp>
617cfdf2879SDavid Chisnall    _LIBCPP_CONSTEXPR const bool numeric_limits<const _Tp>::is_iec559;
618cfdf2879SDavid Chisnalltemplate <class _Tp>
619cfdf2879SDavid Chisnall    _LIBCPP_CONSTEXPR const bool numeric_limits<const _Tp>::is_bounded;
620cfdf2879SDavid Chisnalltemplate <class _Tp>
621cfdf2879SDavid Chisnall    _LIBCPP_CONSTEXPR const bool numeric_limits<const _Tp>::is_modulo;
622cfdf2879SDavid Chisnalltemplate <class _Tp>
623cfdf2879SDavid Chisnall    _LIBCPP_CONSTEXPR const bool numeric_limits<const _Tp>::traps;
624cfdf2879SDavid Chisnalltemplate <class _Tp>
625cfdf2879SDavid Chisnall    _LIBCPP_CONSTEXPR const bool numeric_limits<const _Tp>::tinyness_before;
626cfdf2879SDavid Chisnalltemplate <class _Tp>
627cfdf2879SDavid Chisnall    _LIBCPP_CONSTEXPR const float_round_style numeric_limits<const _Tp>::round_style;
628cfdf2879SDavid Chisnall
629cfdf2879SDavid Chisnalltemplate <class _Tp>
630aed8d94eSDimitry Andricclass _LIBCPP_TEMPLATE_VIS numeric_limits<volatile _Tp>
6317a984708SDavid Chisnall    : private numeric_limits<_Tp>
6327a984708SDavid Chisnall{
6337a984708SDavid Chisnall    typedef numeric_limits<_Tp> __base;
6347a984708SDavid Chisnall    typedef _Tp type;
6357a984708SDavid Chisnallpublic:
636b03f91a8SDavid Chisnall    static _LIBCPP_CONSTEXPR const bool is_specialized = __base::is_specialized;
637b03f91a8SDavid Chisnall    _LIBCPP_INLINE_VISIBILITY static _LIBCPP_CONSTEXPR type min() _NOEXCEPT {return __base::min();}
638b03f91a8SDavid Chisnall    _LIBCPP_INLINE_VISIBILITY static _LIBCPP_CONSTEXPR type max() _NOEXCEPT {return __base::max();}
639b03f91a8SDavid Chisnall    _LIBCPP_INLINE_VISIBILITY static _LIBCPP_CONSTEXPR type lowest() _NOEXCEPT {return __base::lowest();}
6407a984708SDavid Chisnall
641b03f91a8SDavid Chisnall    static _LIBCPP_CONSTEXPR const int  digits = __base::digits;
642b03f91a8SDavid Chisnall    static _LIBCPP_CONSTEXPR const int  digits10 = __base::digits10;
643b03f91a8SDavid Chisnall    static _LIBCPP_CONSTEXPR const int  max_digits10 = __base::max_digits10;
644b03f91a8SDavid Chisnall    static _LIBCPP_CONSTEXPR const bool is_signed = __base::is_signed;
645b03f91a8SDavid Chisnall    static _LIBCPP_CONSTEXPR const bool is_integer = __base::is_integer;
646b03f91a8SDavid Chisnall    static _LIBCPP_CONSTEXPR const bool is_exact = __base::is_exact;
647b03f91a8SDavid Chisnall    static _LIBCPP_CONSTEXPR const int  radix = __base::radix;
648b03f91a8SDavid Chisnall    _LIBCPP_INLINE_VISIBILITY static _LIBCPP_CONSTEXPR type epsilon() _NOEXCEPT {return __base::epsilon();}
649b03f91a8SDavid Chisnall    _LIBCPP_INLINE_VISIBILITY static _LIBCPP_CONSTEXPR type round_error() _NOEXCEPT {return __base::round_error();}
6507a984708SDavid Chisnall
651b03f91a8SDavid Chisnall    static _LIBCPP_CONSTEXPR const int  min_exponent = __base::min_exponent;
652b03f91a8SDavid Chisnall    static _LIBCPP_CONSTEXPR const int  min_exponent10 = __base::min_exponent10;
653b03f91a8SDavid Chisnall    static _LIBCPP_CONSTEXPR const int  max_exponent = __base::max_exponent;
654b03f91a8SDavid Chisnall    static _LIBCPP_CONSTEXPR const int  max_exponent10 = __base::max_exponent10;
6557a984708SDavid Chisnall
656b03f91a8SDavid Chisnall    static _LIBCPP_CONSTEXPR const bool has_infinity = __base::has_infinity;
657b03f91a8SDavid Chisnall    static _LIBCPP_CONSTEXPR const bool has_quiet_NaN = __base::has_quiet_NaN;
658b03f91a8SDavid Chisnall    static _LIBCPP_CONSTEXPR const bool has_signaling_NaN = __base::has_signaling_NaN;
659b03f91a8SDavid Chisnall    static _LIBCPP_CONSTEXPR const float_denorm_style has_denorm = __base::has_denorm;
660b03f91a8SDavid Chisnall    static _LIBCPP_CONSTEXPR const bool has_denorm_loss = __base::has_denorm_loss;
661b03f91a8SDavid Chisnall    _LIBCPP_INLINE_VISIBILITY static _LIBCPP_CONSTEXPR type infinity() _NOEXCEPT {return __base::infinity();}
662b03f91a8SDavid Chisnall    _LIBCPP_INLINE_VISIBILITY static _LIBCPP_CONSTEXPR type quiet_NaN() _NOEXCEPT {return __base::quiet_NaN();}
663b03f91a8SDavid Chisnall    _LIBCPP_INLINE_VISIBILITY static _LIBCPP_CONSTEXPR type signaling_NaN() _NOEXCEPT {return __base::signaling_NaN();}
664b03f91a8SDavid Chisnall    _LIBCPP_INLINE_VISIBILITY static _LIBCPP_CONSTEXPR type denorm_min() _NOEXCEPT {return __base::denorm_min();}
6657a984708SDavid Chisnall
666b03f91a8SDavid Chisnall    static _LIBCPP_CONSTEXPR const bool is_iec559 = __base::is_iec559;
667b03f91a8SDavid Chisnall    static _LIBCPP_CONSTEXPR const bool is_bounded = __base::is_bounded;
668b03f91a8SDavid Chisnall    static _LIBCPP_CONSTEXPR const bool is_modulo = __base::is_modulo;
6697a984708SDavid Chisnall
670b03f91a8SDavid Chisnall    static _LIBCPP_CONSTEXPR const bool traps = __base::traps;
671b03f91a8SDavid Chisnall    static _LIBCPP_CONSTEXPR const bool tinyness_before = __base::tinyness_before;
672b03f91a8SDavid Chisnall    static _LIBCPP_CONSTEXPR const float_round_style round_style = __base::round_style;
6737a984708SDavid Chisnall};
6747a984708SDavid Chisnall
6757a984708SDavid Chisnalltemplate <class _Tp>
676cfdf2879SDavid Chisnall    _LIBCPP_CONSTEXPR const bool numeric_limits<volatile _Tp>::is_specialized;
677cfdf2879SDavid Chisnalltemplate <class _Tp>
678cfdf2879SDavid Chisnall    _LIBCPP_CONSTEXPR const int numeric_limits<volatile _Tp>::digits;
679cfdf2879SDavid Chisnalltemplate <class _Tp>
680cfdf2879SDavid Chisnall    _LIBCPP_CONSTEXPR const int numeric_limits<volatile _Tp>::digits10;
681cfdf2879SDavid Chisnalltemplate <class _Tp>
682cfdf2879SDavid Chisnall    _LIBCPP_CONSTEXPR const int numeric_limits<volatile _Tp>::max_digits10;
683cfdf2879SDavid Chisnalltemplate <class _Tp>
684cfdf2879SDavid Chisnall    _LIBCPP_CONSTEXPR const bool numeric_limits<volatile _Tp>::is_signed;
685cfdf2879SDavid Chisnalltemplate <class _Tp>
686cfdf2879SDavid Chisnall    _LIBCPP_CONSTEXPR const bool numeric_limits<volatile _Tp>::is_integer;
687cfdf2879SDavid Chisnalltemplate <class _Tp>
688cfdf2879SDavid Chisnall    _LIBCPP_CONSTEXPR const bool numeric_limits<volatile _Tp>::is_exact;
689cfdf2879SDavid Chisnalltemplate <class _Tp>
690cfdf2879SDavid Chisnall    _LIBCPP_CONSTEXPR const int numeric_limits<volatile _Tp>::radix;
691cfdf2879SDavid Chisnalltemplate <class _Tp>
692cfdf2879SDavid Chisnall    _LIBCPP_CONSTEXPR const int numeric_limits<volatile _Tp>::min_exponent;
693cfdf2879SDavid Chisnalltemplate <class _Tp>
694cfdf2879SDavid Chisnall    _LIBCPP_CONSTEXPR const int numeric_limits<volatile _Tp>::min_exponent10;
695cfdf2879SDavid Chisnalltemplate <class _Tp>
696cfdf2879SDavid Chisnall    _LIBCPP_CONSTEXPR const int numeric_limits<volatile _Tp>::max_exponent;
697cfdf2879SDavid Chisnalltemplate <class _Tp>
698cfdf2879SDavid Chisnall    _LIBCPP_CONSTEXPR const int numeric_limits<volatile _Tp>::max_exponent10;
699cfdf2879SDavid Chisnalltemplate <class _Tp>
700cfdf2879SDavid Chisnall    _LIBCPP_CONSTEXPR const bool numeric_limits<volatile _Tp>::has_infinity;
701cfdf2879SDavid Chisnalltemplate <class _Tp>
702cfdf2879SDavid Chisnall    _LIBCPP_CONSTEXPR const bool numeric_limits<volatile _Tp>::has_quiet_NaN;
703cfdf2879SDavid Chisnalltemplate <class _Tp>
704cfdf2879SDavid Chisnall    _LIBCPP_CONSTEXPR const bool numeric_limits<volatile _Tp>::has_signaling_NaN;
705cfdf2879SDavid Chisnalltemplate <class _Tp>
706cfdf2879SDavid Chisnall    _LIBCPP_CONSTEXPR const float_denorm_style numeric_limits<volatile _Tp>::has_denorm;
707cfdf2879SDavid Chisnalltemplate <class _Tp>
708cfdf2879SDavid Chisnall    _LIBCPP_CONSTEXPR const bool numeric_limits<volatile _Tp>::has_denorm_loss;
709cfdf2879SDavid Chisnalltemplate <class _Tp>
710cfdf2879SDavid Chisnall    _LIBCPP_CONSTEXPR const bool numeric_limits<volatile _Tp>::is_iec559;
711cfdf2879SDavid Chisnalltemplate <class _Tp>
712cfdf2879SDavid Chisnall    _LIBCPP_CONSTEXPR const bool numeric_limits<volatile _Tp>::is_bounded;
713cfdf2879SDavid Chisnalltemplate <class _Tp>
714cfdf2879SDavid Chisnall    _LIBCPP_CONSTEXPR const bool numeric_limits<volatile _Tp>::is_modulo;
715cfdf2879SDavid Chisnalltemplate <class _Tp>
716cfdf2879SDavid Chisnall    _LIBCPP_CONSTEXPR const bool numeric_limits<volatile _Tp>::traps;
717cfdf2879SDavid Chisnalltemplate <class _Tp>
718cfdf2879SDavid Chisnall    _LIBCPP_CONSTEXPR const bool numeric_limits<volatile _Tp>::tinyness_before;
719cfdf2879SDavid Chisnalltemplate <class _Tp>
720cfdf2879SDavid Chisnall    _LIBCPP_CONSTEXPR const float_round_style numeric_limits<volatile _Tp>::round_style;
721cfdf2879SDavid Chisnall
722cfdf2879SDavid Chisnalltemplate <class _Tp>
723aed8d94eSDimitry Andricclass _LIBCPP_TEMPLATE_VIS numeric_limits<const volatile _Tp>
7247a984708SDavid Chisnall    : private numeric_limits<_Tp>
7257a984708SDavid Chisnall{
7267a984708SDavid Chisnall    typedef numeric_limits<_Tp> __base;
7277a984708SDavid Chisnall    typedef _Tp type;
7287a984708SDavid Chisnallpublic:
729b03f91a8SDavid Chisnall    static _LIBCPP_CONSTEXPR const bool is_specialized = __base::is_specialized;
730b03f91a8SDavid Chisnall    _LIBCPP_INLINE_VISIBILITY static _LIBCPP_CONSTEXPR type min() _NOEXCEPT {return __base::min();}
731b03f91a8SDavid Chisnall    _LIBCPP_INLINE_VISIBILITY static _LIBCPP_CONSTEXPR type max() _NOEXCEPT {return __base::max();}
732b03f91a8SDavid Chisnall    _LIBCPP_INLINE_VISIBILITY static _LIBCPP_CONSTEXPR type lowest() _NOEXCEPT {return __base::lowest();}
7337a984708SDavid Chisnall
734b03f91a8SDavid Chisnall    static _LIBCPP_CONSTEXPR const int  digits = __base::digits;
735b03f91a8SDavid Chisnall    static _LIBCPP_CONSTEXPR const int  digits10 = __base::digits10;
736b03f91a8SDavid Chisnall    static _LIBCPP_CONSTEXPR const int  max_digits10 = __base::max_digits10;
737b03f91a8SDavid Chisnall    static _LIBCPP_CONSTEXPR const bool is_signed = __base::is_signed;
738b03f91a8SDavid Chisnall    static _LIBCPP_CONSTEXPR const bool is_integer = __base::is_integer;
739b03f91a8SDavid Chisnall    static _LIBCPP_CONSTEXPR const bool is_exact = __base::is_exact;
740b03f91a8SDavid Chisnall    static _LIBCPP_CONSTEXPR const int  radix = __base::radix;
741b03f91a8SDavid Chisnall    _LIBCPP_INLINE_VISIBILITY static _LIBCPP_CONSTEXPR type epsilon() _NOEXCEPT {return __base::epsilon();}
742b03f91a8SDavid Chisnall    _LIBCPP_INLINE_VISIBILITY static _LIBCPP_CONSTEXPR type round_error() _NOEXCEPT {return __base::round_error();}
7437a984708SDavid Chisnall
744b03f91a8SDavid Chisnall    static _LIBCPP_CONSTEXPR const int  min_exponent = __base::min_exponent;
745b03f91a8SDavid Chisnall    static _LIBCPP_CONSTEXPR const int  min_exponent10 = __base::min_exponent10;
746b03f91a8SDavid Chisnall    static _LIBCPP_CONSTEXPR const int  max_exponent = __base::max_exponent;
747b03f91a8SDavid Chisnall    static _LIBCPP_CONSTEXPR const int  max_exponent10 = __base::max_exponent10;
7487a984708SDavid Chisnall
749b03f91a8SDavid Chisnall    static _LIBCPP_CONSTEXPR const bool has_infinity = __base::has_infinity;
750b03f91a8SDavid Chisnall    static _LIBCPP_CONSTEXPR const bool has_quiet_NaN = __base::has_quiet_NaN;
751b03f91a8SDavid Chisnall    static _LIBCPP_CONSTEXPR const bool has_signaling_NaN = __base::has_signaling_NaN;
752b03f91a8SDavid Chisnall    static _LIBCPP_CONSTEXPR const float_denorm_style has_denorm = __base::has_denorm;
753b03f91a8SDavid Chisnall    static _LIBCPP_CONSTEXPR const bool has_denorm_loss = __base::has_denorm_loss;
754b03f91a8SDavid Chisnall    _LIBCPP_INLINE_VISIBILITY static _LIBCPP_CONSTEXPR type infinity() _NOEXCEPT {return __base::infinity();}
755b03f91a8SDavid Chisnall    _LIBCPP_INLINE_VISIBILITY static _LIBCPP_CONSTEXPR type quiet_NaN() _NOEXCEPT {return __base::quiet_NaN();}
756b03f91a8SDavid Chisnall    _LIBCPP_INLINE_VISIBILITY static _LIBCPP_CONSTEXPR type signaling_NaN() _NOEXCEPT {return __base::signaling_NaN();}
757b03f91a8SDavid Chisnall    _LIBCPP_INLINE_VISIBILITY static _LIBCPP_CONSTEXPR type denorm_min() _NOEXCEPT {return __base::denorm_min();}
7587a984708SDavid Chisnall
759b03f91a8SDavid Chisnall    static _LIBCPP_CONSTEXPR const bool is_iec559 = __base::is_iec559;
760b03f91a8SDavid Chisnall    static _LIBCPP_CONSTEXPR const bool is_bounded = __base::is_bounded;
761b03f91a8SDavid Chisnall    static _LIBCPP_CONSTEXPR const bool is_modulo = __base::is_modulo;
7627a984708SDavid Chisnall
763b03f91a8SDavid Chisnall    static _LIBCPP_CONSTEXPR const bool traps = __base::traps;
764b03f91a8SDavid Chisnall    static _LIBCPP_CONSTEXPR const bool tinyness_before = __base::tinyness_before;
765b03f91a8SDavid Chisnall    static _LIBCPP_CONSTEXPR const float_round_style round_style = __base::round_style;
7667a984708SDavid Chisnall};
7677a984708SDavid Chisnall
768cfdf2879SDavid Chisnalltemplate <class _Tp>
769cfdf2879SDavid Chisnall    _LIBCPP_CONSTEXPR const bool numeric_limits<const volatile _Tp>::is_specialized;
770cfdf2879SDavid Chisnalltemplate <class _Tp>
771cfdf2879SDavid Chisnall    _LIBCPP_CONSTEXPR const int numeric_limits<const volatile _Tp>::digits;
772cfdf2879SDavid Chisnalltemplate <class _Tp>
773cfdf2879SDavid Chisnall    _LIBCPP_CONSTEXPR const int numeric_limits<const volatile _Tp>::digits10;
774cfdf2879SDavid Chisnalltemplate <class _Tp>
775d72607e9SDimitry Andric    _LIBCPP_CONSTEXPR const int numeric_limits<const volatile _Tp>::max_digits10;
776cfdf2879SDavid Chisnalltemplate <class _Tp>
777cfdf2879SDavid Chisnall    _LIBCPP_CONSTEXPR const bool numeric_limits<const volatile _Tp>::is_signed;
778cfdf2879SDavid Chisnalltemplate <class _Tp>
779cfdf2879SDavid Chisnall    _LIBCPP_CONSTEXPR const bool numeric_limits<const volatile _Tp>::is_integer;
780cfdf2879SDavid Chisnalltemplate <class _Tp>
781cfdf2879SDavid Chisnall    _LIBCPP_CONSTEXPR const bool numeric_limits<const volatile _Tp>::is_exact;
782cfdf2879SDavid Chisnalltemplate <class _Tp>
783cfdf2879SDavid Chisnall    _LIBCPP_CONSTEXPR const int numeric_limits<const volatile _Tp>::radix;
784cfdf2879SDavid Chisnalltemplate <class _Tp>
785cfdf2879SDavid Chisnall    _LIBCPP_CONSTEXPR const int numeric_limits<const volatile _Tp>::min_exponent;
786cfdf2879SDavid Chisnalltemplate <class _Tp>
787cfdf2879SDavid Chisnall    _LIBCPP_CONSTEXPR const int numeric_limits<const volatile _Tp>::min_exponent10;
788cfdf2879SDavid Chisnalltemplate <class _Tp>
789cfdf2879SDavid Chisnall    _LIBCPP_CONSTEXPR const int numeric_limits<const volatile _Tp>::max_exponent;
790cfdf2879SDavid Chisnalltemplate <class _Tp>
791cfdf2879SDavid Chisnall    _LIBCPP_CONSTEXPR const int numeric_limits<const volatile _Tp>::max_exponent10;
792cfdf2879SDavid Chisnalltemplate <class _Tp>
793cfdf2879SDavid Chisnall    _LIBCPP_CONSTEXPR const bool numeric_limits<const volatile _Tp>::has_infinity;
794cfdf2879SDavid Chisnalltemplate <class _Tp>
795cfdf2879SDavid Chisnall    _LIBCPP_CONSTEXPR const bool numeric_limits<const volatile _Tp>::has_quiet_NaN;
796cfdf2879SDavid Chisnalltemplate <class _Tp>
797cfdf2879SDavid Chisnall    _LIBCPP_CONSTEXPR const bool numeric_limits<const volatile _Tp>::has_signaling_NaN;
798cfdf2879SDavid Chisnalltemplate <class _Tp>
799cfdf2879SDavid Chisnall    _LIBCPP_CONSTEXPR const float_denorm_style numeric_limits<const volatile _Tp>::has_denorm;
800cfdf2879SDavid Chisnalltemplate <class _Tp>
801cfdf2879SDavid Chisnall    _LIBCPP_CONSTEXPR const bool numeric_limits<const volatile _Tp>::has_denorm_loss;
802cfdf2879SDavid Chisnalltemplate <class _Tp>
803cfdf2879SDavid Chisnall    _LIBCPP_CONSTEXPR const bool numeric_limits<const volatile _Tp>::is_iec559;
804cfdf2879SDavid Chisnalltemplate <class _Tp>
805cfdf2879SDavid Chisnall    _LIBCPP_CONSTEXPR const bool numeric_limits<const volatile _Tp>::is_bounded;
806cfdf2879SDavid Chisnalltemplate <class _Tp>
807cfdf2879SDavid Chisnall    _LIBCPP_CONSTEXPR const bool numeric_limits<const volatile _Tp>::is_modulo;
808cfdf2879SDavid Chisnalltemplate <class _Tp>
809cfdf2879SDavid Chisnall    _LIBCPP_CONSTEXPR const bool numeric_limits<const volatile _Tp>::traps;
810cfdf2879SDavid Chisnalltemplate <class _Tp>
811cfdf2879SDavid Chisnall    _LIBCPP_CONSTEXPR const bool numeric_limits<const volatile _Tp>::tinyness_before;
812cfdf2879SDavid Chisnalltemplate <class _Tp>
813cfdf2879SDavid Chisnall    _LIBCPP_CONSTEXPR const float_round_style numeric_limits<const volatile _Tp>::round_style;
814cfdf2879SDavid Chisnall
8157a984708SDavid Chisnall_LIBCPP_END_NAMESPACE_STD
8167a984708SDavid Chisnall
817f9448bf3SDimitry Andric_LIBCPP_POP_MACROS
818f9448bf3SDimitry Andric
8197a984708SDavid Chisnall#endif  // _LIBCPP_LIMITS
820