xref: /llvm-project-15.0.7/libcxx/include/limits (revision a83004f4)
13e519524SHoward Hinnant// -*- C++ -*-
2eb8650a7SLouis Dionne//===----------------------------------------------------------------------===//
33e519524SHoward Hinnant//
457b08b09SChandler Carruth// Part of the LLVM Project, under the Apache License v2.0 with LLVM Exceptions.
557b08b09SChandler Carruth// See https://llvm.org/LICENSE.txt for license information.
657b08b09SChandler Carruth// SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception
73e519524SHoward Hinnant//
83e519524SHoward Hinnant//===----------------------------------------------------------------------===//
93e519524SHoward Hinnant
103e519524SHoward Hinnant#ifndef _LIBCPP_LIMITS
113e519524SHoward Hinnant#define _LIBCPP_LIMITS
123e519524SHoward Hinnant
133e519524SHoward Hinnant/*
143e519524SHoward Hinnant    limits synopsis
153e519524SHoward Hinnant
163e519524SHoward Hinnantnamespace std
173e519524SHoward Hinnant{
183e519524SHoward Hinnant
193e519524SHoward Hinnanttemplate<class T>
203e519524SHoward Hinnantclass numeric_limits
213e519524SHoward Hinnant{
223e519524SHoward Hinnantpublic:
23338eb311SHoward Hinnant    static constexpr bool is_specialized = false;
24338eb311SHoward Hinnant    static constexpr T min() noexcept;
25338eb311SHoward Hinnant    static constexpr T max() noexcept;
26338eb311SHoward Hinnant    static constexpr T lowest() noexcept;
273e519524SHoward Hinnant
28338eb311SHoward Hinnant    static constexpr int  digits = 0;
29338eb311SHoward Hinnant    static constexpr int  digits10 = 0;
30338eb311SHoward Hinnant    static constexpr int  max_digits10 = 0;
31338eb311SHoward Hinnant    static constexpr bool is_signed = false;
32338eb311SHoward Hinnant    static constexpr bool is_integer = false;
33338eb311SHoward Hinnant    static constexpr bool is_exact = false;
34338eb311SHoward Hinnant    static constexpr int  radix = 0;
35338eb311SHoward Hinnant    static constexpr T epsilon() noexcept;
36338eb311SHoward Hinnant    static constexpr T round_error() noexcept;
373e519524SHoward Hinnant
38338eb311SHoward Hinnant    static constexpr int  min_exponent = 0;
39338eb311SHoward Hinnant    static constexpr int  min_exponent10 = 0;
40338eb311SHoward Hinnant    static constexpr int  max_exponent = 0;
41338eb311SHoward Hinnant    static constexpr int  max_exponent10 = 0;
423e519524SHoward Hinnant
43338eb311SHoward Hinnant    static constexpr bool has_infinity = false;
44338eb311SHoward Hinnant    static constexpr bool has_quiet_NaN = false;
45338eb311SHoward Hinnant    static constexpr bool has_signaling_NaN = false;
46338eb311SHoward Hinnant    static constexpr float_denorm_style has_denorm = denorm_absent;
47338eb311SHoward Hinnant    static constexpr bool has_denorm_loss = false;
48338eb311SHoward Hinnant    static constexpr T infinity() noexcept;
49338eb311SHoward Hinnant    static constexpr T quiet_NaN() noexcept;
50338eb311SHoward Hinnant    static constexpr T signaling_NaN() noexcept;
51338eb311SHoward Hinnant    static constexpr T denorm_min() noexcept;
523e519524SHoward Hinnant
53338eb311SHoward Hinnant    static constexpr bool is_iec559 = false;
54338eb311SHoward Hinnant    static constexpr bool is_bounded = false;
55338eb311SHoward Hinnant    static constexpr bool is_modulo = false;
563e519524SHoward Hinnant
57338eb311SHoward Hinnant    static constexpr bool traps = false;
58338eb311SHoward Hinnant    static constexpr bool tinyness_before = false;
59338eb311SHoward Hinnant    static constexpr float_round_style round_style = round_toward_zero;
603e519524SHoward Hinnant};
613e519524SHoward Hinnant
623e519524SHoward Hinnantenum float_round_style
633e519524SHoward Hinnant{
643e519524SHoward Hinnant    round_indeterminate       = -1,
653e519524SHoward Hinnant    round_toward_zero         =  0,
663e519524SHoward Hinnant    round_to_nearest          =  1,
673e519524SHoward Hinnant    round_toward_infinity     =  2,
683e519524SHoward Hinnant    round_toward_neg_infinity =  3
693e519524SHoward Hinnant};
703e519524SHoward Hinnant
713e519524SHoward Hinnantenum float_denorm_style
723e519524SHoward Hinnant{
733e519524SHoward Hinnant    denorm_indeterminate = -1,
743e519524SHoward Hinnant    denorm_absent = 0,
753e519524SHoward Hinnant    denorm_present = 1
763e519524SHoward Hinnant};
773e519524SHoward Hinnant
783e519524SHoward Hinnanttemplate<> class numeric_limits<cv bool>;
793e519524SHoward Hinnant
803e519524SHoward Hinnanttemplate<> class numeric_limits<cv char>;
813e519524SHoward Hinnanttemplate<> class numeric_limits<cv signed char>;
823e519524SHoward Hinnanttemplate<> class numeric_limits<cv unsigned char>;
833e519524SHoward Hinnanttemplate<> class numeric_limits<cv wchar_t>;
8408794627SMarshall Clowtemplate<> class numeric_limits<cv char8_t>; // C++20
853e519524SHoward Hinnanttemplate<> class numeric_limits<cv char16_t>;
863e519524SHoward Hinnanttemplate<> class numeric_limits<cv char32_t>;
873e519524SHoward Hinnant
883e519524SHoward Hinnanttemplate<> class numeric_limits<cv short>;
893e519524SHoward Hinnanttemplate<> class numeric_limits<cv int>;
903e519524SHoward Hinnanttemplate<> class numeric_limits<cv long>;
913e519524SHoward Hinnanttemplate<> class numeric_limits<cv long long>;
923e519524SHoward Hinnanttemplate<> class numeric_limits<cv unsigned short>;
933e519524SHoward Hinnanttemplate<> class numeric_limits<cv unsigned int>;
943e519524SHoward Hinnanttemplate<> class numeric_limits<cv unsigned long>;
953e519524SHoward Hinnanttemplate<> class numeric_limits<cv unsigned long long>;
963e519524SHoward Hinnant
973e519524SHoward Hinnanttemplate<> class numeric_limits<cv float>;
983e519524SHoward Hinnanttemplate<> class numeric_limits<cv double>;
993e519524SHoward Hinnanttemplate<> class numeric_limits<cv long double>;
1003e519524SHoward Hinnant
1013e519524SHoward Hinnant}  // std
1023e519524SHoward Hinnant
1033e519524SHoward Hinnant*/
104*385cc25aSLouis Dionne
105*385cc25aSLouis Dionne#include <__assert> // all public C++ headers provide the assertion handler
1063f5b5fffSBen Craig#include <__config>
1073e519524SHoward Hinnant#include <type_traits>
1083e519524SHoward Hinnant
1095d50aa32SEric Fiselier#if defined(_LIBCPP_COMPILER_MSVC)
110b5175681SLouis Dionne#include "__support/win32/limits_msvc_win32.h"
1110be8f64cSHoward Hinnant#endif // _LIBCPP_MSVCRT
112e4383379SHoward Hinnant
113a016efb1SEric Fiselier#if !defined(_LIBCPP_HAS_NO_PRAGMA_SYSTEM_HEADER)
114a016efb1SEric Fiselier#  pragma GCC system_header
115a016efb1SEric Fiselier#endif
116a016efb1SEric Fiselier
117a016efb1SEric Fiselier_LIBCPP_PUSH_MACROS
118a016efb1SEric Fiselier#include <__undef_macros>
1197dad0bd6SMarshall Clow#include <version>
120a016efb1SEric Fiselier
121a016efb1SEric Fiselier
1223e519524SHoward Hinnant_LIBCPP_BEGIN_NAMESPACE_STD
1233e519524SHoward Hinnant
1243e519524SHoward Hinnantenum float_round_style
1253e519524SHoward Hinnant{
1263e519524SHoward Hinnant    round_indeterminate       = -1,
1273e519524SHoward Hinnant    round_toward_zero         =  0,
1283e519524SHoward Hinnant    round_to_nearest          =  1,
1293e519524SHoward Hinnant    round_toward_infinity     =  2,
1303e519524SHoward Hinnant    round_toward_neg_infinity =  3
1313e519524SHoward Hinnant};
1323e519524SHoward Hinnant
1333e519524SHoward Hinnantenum float_denorm_style
1343e519524SHoward Hinnant{
1353e519524SHoward Hinnant    denorm_indeterminate = -1,
1363e519524SHoward Hinnant    denorm_absent = 0,
1373e519524SHoward Hinnant    denorm_present = 1
1383e519524SHoward Hinnant};
1393e519524SHoward Hinnant
1403e519524SHoward Hinnanttemplate <class _Tp, bool = is_arithmetic<_Tp>::value>
1413e519524SHoward Hinnantclass __libcpp_numeric_limits
1423e519524SHoward Hinnant{
1433e519524SHoward Hinnantprotected:
1443e519524SHoward Hinnant    typedef _Tp type;
1453e519524SHoward Hinnant
146338eb311SHoward Hinnant    static _LIBCPP_CONSTEXPR const  bool is_specialized = false;
147338eb311SHoward Hinnant    _LIBCPP_INLINE_VISIBILITY static _LIBCPP_CONSTEXPR type min() _NOEXCEPT {return type();}
148338eb311SHoward Hinnant    _LIBCPP_INLINE_VISIBILITY static _LIBCPP_CONSTEXPR type max() _NOEXCEPT {return type();}
149338eb311SHoward Hinnant    _LIBCPP_INLINE_VISIBILITY static _LIBCPP_CONSTEXPR type lowest() _NOEXCEPT {return type();}
1503e519524SHoward Hinnant
151338eb311SHoward Hinnant    static _LIBCPP_CONSTEXPR const int  digits = 0;
152338eb311SHoward Hinnant    static _LIBCPP_CONSTEXPR const int  digits10 = 0;
153338eb311SHoward Hinnant    static _LIBCPP_CONSTEXPR const int  max_digits10 = 0;
154338eb311SHoward Hinnant    static _LIBCPP_CONSTEXPR const bool is_signed = false;
155338eb311SHoward Hinnant    static _LIBCPP_CONSTEXPR const bool is_integer = false;
156338eb311SHoward Hinnant    static _LIBCPP_CONSTEXPR const bool is_exact = false;
157338eb311SHoward Hinnant    static _LIBCPP_CONSTEXPR const int  radix = 0;
158338eb311SHoward Hinnant    _LIBCPP_INLINE_VISIBILITY static _LIBCPP_CONSTEXPR type epsilon() _NOEXCEPT {return type();}
159338eb311SHoward Hinnant    _LIBCPP_INLINE_VISIBILITY static _LIBCPP_CONSTEXPR type round_error() _NOEXCEPT {return type();}
1603e519524SHoward Hinnant
161338eb311SHoward Hinnant    static _LIBCPP_CONSTEXPR const int  min_exponent = 0;
162338eb311SHoward Hinnant    static _LIBCPP_CONSTEXPR const int  min_exponent10 = 0;
163338eb311SHoward Hinnant    static _LIBCPP_CONSTEXPR const int  max_exponent = 0;
164338eb311SHoward Hinnant    static _LIBCPP_CONSTEXPR const int  max_exponent10 = 0;
1653e519524SHoward Hinnant
166338eb311SHoward Hinnant    static _LIBCPP_CONSTEXPR const bool has_infinity = false;
167338eb311SHoward Hinnant    static _LIBCPP_CONSTEXPR const bool has_quiet_NaN = false;
168338eb311SHoward Hinnant    static _LIBCPP_CONSTEXPR const bool has_signaling_NaN = false;
169338eb311SHoward Hinnant    static _LIBCPP_CONSTEXPR const float_denorm_style has_denorm = denorm_absent;
170338eb311SHoward Hinnant    static _LIBCPP_CONSTEXPR const bool has_denorm_loss = false;
171338eb311SHoward Hinnant    _LIBCPP_INLINE_VISIBILITY static _LIBCPP_CONSTEXPR type infinity() _NOEXCEPT {return type();}
172338eb311SHoward Hinnant    _LIBCPP_INLINE_VISIBILITY static _LIBCPP_CONSTEXPR type quiet_NaN() _NOEXCEPT {return type();}
173338eb311SHoward Hinnant    _LIBCPP_INLINE_VISIBILITY static _LIBCPP_CONSTEXPR type signaling_NaN() _NOEXCEPT {return type();}
174338eb311SHoward Hinnant    _LIBCPP_INLINE_VISIBILITY static _LIBCPP_CONSTEXPR type denorm_min() _NOEXCEPT {return type();}
1753e519524SHoward Hinnant
176338eb311SHoward Hinnant    static _LIBCPP_CONSTEXPR const bool is_iec559 = false;
177338eb311SHoward Hinnant    static _LIBCPP_CONSTEXPR const bool is_bounded = false;
178338eb311SHoward Hinnant    static _LIBCPP_CONSTEXPR const bool is_modulo = false;
1793e519524SHoward Hinnant
180338eb311SHoward Hinnant    static _LIBCPP_CONSTEXPR const bool traps = false;
181338eb311SHoward Hinnant    static _LIBCPP_CONSTEXPR const bool tinyness_before = false;
182338eb311SHoward Hinnant    static _LIBCPP_CONSTEXPR const float_round_style round_style = round_toward_zero;
1833e519524SHoward Hinnant};
1843e519524SHoward Hinnant
1859ffacf3dSEric Fiseliertemplate <class _Tp, int __digits, bool _IsSigned>
1863e519524SHoward Hinnantstruct __libcpp_compute_min
1873e519524SHoward Hinnant{
1889ffacf3dSEric Fiselier    static _LIBCPP_CONSTEXPR const _Tp value = _Tp(_Tp(1) << __digits);
1893e519524SHoward Hinnant};
1903e519524SHoward Hinnant
1919ffacf3dSEric Fiseliertemplate <class _Tp, int __digits>
1929ffacf3dSEric Fiselierstruct __libcpp_compute_min<_Tp, __digits, false>
1933e519524SHoward Hinnant{
194338eb311SHoward Hinnant    static _LIBCPP_CONSTEXPR const _Tp value = _Tp(0);
1953e519524SHoward Hinnant};
1963e519524SHoward Hinnant
1973e519524SHoward Hinnanttemplate <class _Tp>
1983e519524SHoward Hinnantclass __libcpp_numeric_limits<_Tp, true>
1993e519524SHoward Hinnant{
2003e519524SHoward Hinnantprotected:
2013e519524SHoward Hinnant    typedef _Tp type;
2023e519524SHoward Hinnant
203338eb311SHoward Hinnant    static _LIBCPP_CONSTEXPR const bool is_specialized = true;
2043e519524SHoward Hinnant
205338eb311SHoward Hinnant    static _LIBCPP_CONSTEXPR const bool is_signed = type(-1) < type(0);
206338eb311SHoward Hinnant    static _LIBCPP_CONSTEXPR const int  digits = static_cast<int>(sizeof(type) * __CHAR_BIT__ - is_signed);
207338eb311SHoward Hinnant    static _LIBCPP_CONSTEXPR const int  digits10 = digits * 3 / 10;
208338eb311SHoward Hinnant    static _LIBCPP_CONSTEXPR const int  max_digits10 = 0;
209338eb311SHoward Hinnant    static _LIBCPP_CONSTEXPR const type __min = __libcpp_compute_min<type, digits, is_signed>::value;
210338eb311SHoward Hinnant    static _LIBCPP_CONSTEXPR const type __max = is_signed ? type(type(~0) ^ __min) : type(~0);
211338eb311SHoward Hinnant    _LIBCPP_INLINE_VISIBILITY static _LIBCPP_CONSTEXPR type min() _NOEXCEPT {return __min;}
212338eb311SHoward Hinnant    _LIBCPP_INLINE_VISIBILITY static _LIBCPP_CONSTEXPR type max() _NOEXCEPT {return __max;}
213338eb311SHoward Hinnant    _LIBCPP_INLINE_VISIBILITY static _LIBCPP_CONSTEXPR type lowest() _NOEXCEPT {return min();}
2143e519524SHoward Hinnant
215338eb311SHoward Hinnant    static _LIBCPP_CONSTEXPR const bool is_integer = true;
216338eb311SHoward Hinnant    static _LIBCPP_CONSTEXPR const bool is_exact = true;
217338eb311SHoward Hinnant    static _LIBCPP_CONSTEXPR const int  radix = 2;
218338eb311SHoward Hinnant    _LIBCPP_INLINE_VISIBILITY static _LIBCPP_CONSTEXPR type epsilon() _NOEXCEPT {return type(0);}
219338eb311SHoward Hinnant    _LIBCPP_INLINE_VISIBILITY static _LIBCPP_CONSTEXPR type round_error() _NOEXCEPT {return type(0);}
2203e519524SHoward Hinnant
221338eb311SHoward Hinnant    static _LIBCPP_CONSTEXPR const int  min_exponent = 0;
222338eb311SHoward Hinnant    static _LIBCPP_CONSTEXPR const int  min_exponent10 = 0;
223338eb311SHoward Hinnant    static _LIBCPP_CONSTEXPR const int  max_exponent = 0;
224338eb311SHoward Hinnant    static _LIBCPP_CONSTEXPR const int  max_exponent10 = 0;
2253e519524SHoward Hinnant
226338eb311SHoward Hinnant    static _LIBCPP_CONSTEXPR const bool has_infinity = false;
227338eb311SHoward Hinnant    static _LIBCPP_CONSTEXPR const bool has_quiet_NaN = false;
228338eb311SHoward Hinnant    static _LIBCPP_CONSTEXPR const bool has_signaling_NaN = false;
229338eb311SHoward Hinnant    static _LIBCPP_CONSTEXPR const float_denorm_style has_denorm = denorm_absent;
230338eb311SHoward Hinnant    static _LIBCPP_CONSTEXPR const bool has_denorm_loss = false;
231338eb311SHoward Hinnant    _LIBCPP_INLINE_VISIBILITY static _LIBCPP_CONSTEXPR type infinity() _NOEXCEPT {return type(0);}
232338eb311SHoward Hinnant    _LIBCPP_INLINE_VISIBILITY static _LIBCPP_CONSTEXPR type quiet_NaN() _NOEXCEPT {return type(0);}
233338eb311SHoward Hinnant    _LIBCPP_INLINE_VISIBILITY static _LIBCPP_CONSTEXPR type signaling_NaN() _NOEXCEPT {return type(0);}
234338eb311SHoward Hinnant    _LIBCPP_INLINE_VISIBILITY static _LIBCPP_CONSTEXPR type denorm_min() _NOEXCEPT {return type(0);}
2353e519524SHoward Hinnant
236338eb311SHoward Hinnant    static _LIBCPP_CONSTEXPR const bool is_iec559 = false;
237338eb311SHoward Hinnant    static _LIBCPP_CONSTEXPR const bool is_bounded = true;
2386a577a81SMarshall Clow    static _LIBCPP_CONSTEXPR const bool is_modulo = !_VSTD::is_signed<_Tp>::value;
2393e519524SHoward Hinnant
2404a9e173eSDan Gohman#if defined(__i386__) || defined(__x86_64__) || defined(__pnacl__) || \
2414a9e173eSDan Gohman    defined(__wasm__)
242338eb311SHoward Hinnant    static _LIBCPP_CONSTEXPR const bool traps = true;
2433e519524SHoward Hinnant#else
244338eb311SHoward Hinnant    static _LIBCPP_CONSTEXPR const bool traps = false;
2453e519524SHoward Hinnant#endif
246338eb311SHoward Hinnant    static _LIBCPP_CONSTEXPR const bool tinyness_before = false;
247338eb311SHoward Hinnant    static _LIBCPP_CONSTEXPR const float_round_style round_style = round_toward_zero;
2483e519524SHoward Hinnant};
2493e519524SHoward Hinnant
2503e519524SHoward Hinnanttemplate <>
2513e519524SHoward Hinnantclass __libcpp_numeric_limits<bool, true>
2523e519524SHoward Hinnant{
2533e519524SHoward Hinnantprotected:
2543e519524SHoward Hinnant    typedef bool type;
2553e519524SHoward Hinnant
256338eb311SHoward Hinnant    static _LIBCPP_CONSTEXPR const bool is_specialized = true;
2573e519524SHoward Hinnant
258338eb311SHoward Hinnant    static _LIBCPP_CONSTEXPR const bool is_signed = false;
259338eb311SHoward Hinnant    static _LIBCPP_CONSTEXPR const int  digits = 1;
260338eb311SHoward Hinnant    static _LIBCPP_CONSTEXPR const int  digits10 = 0;
261338eb311SHoward Hinnant    static _LIBCPP_CONSTEXPR const int  max_digits10 = 0;
262338eb311SHoward Hinnant    static _LIBCPP_CONSTEXPR const type __min = false;
263338eb311SHoward Hinnant    static _LIBCPP_CONSTEXPR const type __max = true;
264338eb311SHoward Hinnant    _LIBCPP_INLINE_VISIBILITY static _LIBCPP_CONSTEXPR type min() _NOEXCEPT {return __min;}
265338eb311SHoward Hinnant    _LIBCPP_INLINE_VISIBILITY static _LIBCPP_CONSTEXPR type max() _NOEXCEPT {return __max;}
266338eb311SHoward Hinnant    _LIBCPP_INLINE_VISIBILITY static _LIBCPP_CONSTEXPR type lowest() _NOEXCEPT {return min();}
2673e519524SHoward Hinnant
268338eb311SHoward Hinnant    static _LIBCPP_CONSTEXPR const bool is_integer = true;
269338eb311SHoward Hinnant    static _LIBCPP_CONSTEXPR const bool is_exact = true;
270338eb311SHoward Hinnant    static _LIBCPP_CONSTEXPR const int  radix = 2;
271338eb311SHoward Hinnant    _LIBCPP_INLINE_VISIBILITY static _LIBCPP_CONSTEXPR type epsilon() _NOEXCEPT {return type(0);}
272338eb311SHoward Hinnant    _LIBCPP_INLINE_VISIBILITY static _LIBCPP_CONSTEXPR type round_error() _NOEXCEPT {return type(0);}
2733e519524SHoward Hinnant
274338eb311SHoward Hinnant    static _LIBCPP_CONSTEXPR const int  min_exponent = 0;
275338eb311SHoward Hinnant    static _LIBCPP_CONSTEXPR const int  min_exponent10 = 0;
276338eb311SHoward Hinnant    static _LIBCPP_CONSTEXPR const int  max_exponent = 0;
277338eb311SHoward Hinnant    static _LIBCPP_CONSTEXPR const int  max_exponent10 = 0;
2783e519524SHoward Hinnant
279338eb311SHoward Hinnant    static _LIBCPP_CONSTEXPR const bool has_infinity = false;
280338eb311SHoward Hinnant    static _LIBCPP_CONSTEXPR const bool has_quiet_NaN = false;
281338eb311SHoward Hinnant    static _LIBCPP_CONSTEXPR const bool has_signaling_NaN = false;
282338eb311SHoward Hinnant    static _LIBCPP_CONSTEXPR const float_denorm_style has_denorm = denorm_absent;
283338eb311SHoward Hinnant    static _LIBCPP_CONSTEXPR const bool has_denorm_loss = false;
284338eb311SHoward Hinnant    _LIBCPP_INLINE_VISIBILITY static _LIBCPP_CONSTEXPR type infinity() _NOEXCEPT {return type(0);}
285338eb311SHoward Hinnant    _LIBCPP_INLINE_VISIBILITY static _LIBCPP_CONSTEXPR type quiet_NaN() _NOEXCEPT {return type(0);}
286338eb311SHoward Hinnant    _LIBCPP_INLINE_VISIBILITY static _LIBCPP_CONSTEXPR type signaling_NaN() _NOEXCEPT {return type(0);}
287338eb311SHoward Hinnant    _LIBCPP_INLINE_VISIBILITY static _LIBCPP_CONSTEXPR type denorm_min() _NOEXCEPT {return type(0);}
2883e519524SHoward Hinnant
289338eb311SHoward Hinnant    static _LIBCPP_CONSTEXPR const bool is_iec559 = false;
290338eb311SHoward Hinnant    static _LIBCPP_CONSTEXPR const bool is_bounded = true;
291338eb311SHoward Hinnant    static _LIBCPP_CONSTEXPR const bool is_modulo = false;
2923e519524SHoward Hinnant
293338eb311SHoward Hinnant    static _LIBCPP_CONSTEXPR const bool traps = false;
294338eb311SHoward Hinnant    static _LIBCPP_CONSTEXPR const bool tinyness_before = false;
295338eb311SHoward Hinnant    static _LIBCPP_CONSTEXPR const float_round_style round_style = round_toward_zero;
2963e519524SHoward Hinnant};
2973e519524SHoward Hinnant
2983e519524SHoward Hinnanttemplate <>
2993e519524SHoward Hinnantclass __libcpp_numeric_limits<float, true>
3003e519524SHoward Hinnant{
3013e519524SHoward Hinnantprotected:
3023e519524SHoward Hinnant    typedef float type;
3033e519524SHoward Hinnant
304338eb311SHoward Hinnant    static _LIBCPP_CONSTEXPR const bool is_specialized = true;
3053e519524SHoward Hinnant
306338eb311SHoward Hinnant    static _LIBCPP_CONSTEXPR const bool is_signed = true;
307338eb311SHoward Hinnant    static _LIBCPP_CONSTEXPR const int  digits = __FLT_MANT_DIG__;
308338eb311SHoward Hinnant    static _LIBCPP_CONSTEXPR const int  digits10 = __FLT_DIG__;
30948798156SEric Fiselier    static _LIBCPP_CONSTEXPR const int  max_digits10 = 2+(digits * 30103l)/100000l;
310338eb311SHoward Hinnant    _LIBCPP_INLINE_VISIBILITY static _LIBCPP_CONSTEXPR type min() _NOEXCEPT {return __FLT_MIN__;}
311338eb311SHoward Hinnant    _LIBCPP_INLINE_VISIBILITY static _LIBCPP_CONSTEXPR type max() _NOEXCEPT {return __FLT_MAX__;}
312338eb311SHoward Hinnant    _LIBCPP_INLINE_VISIBILITY static _LIBCPP_CONSTEXPR type lowest() _NOEXCEPT {return -max();}
3133e519524SHoward Hinnant
314338eb311SHoward Hinnant    static _LIBCPP_CONSTEXPR const bool is_integer = false;
315338eb311SHoward Hinnant    static _LIBCPP_CONSTEXPR const bool is_exact = false;
316338eb311SHoward Hinnant    static _LIBCPP_CONSTEXPR const int  radix = __FLT_RADIX__;
317338eb311SHoward Hinnant    _LIBCPP_INLINE_VISIBILITY static _LIBCPP_CONSTEXPR type epsilon() _NOEXCEPT {return __FLT_EPSILON__;}
318338eb311SHoward Hinnant    _LIBCPP_INLINE_VISIBILITY static _LIBCPP_CONSTEXPR type round_error() _NOEXCEPT {return 0.5F;}
3193e519524SHoward Hinnant
320338eb311SHoward Hinnant    static _LIBCPP_CONSTEXPR const int  min_exponent = __FLT_MIN_EXP__;
321338eb311SHoward Hinnant    static _LIBCPP_CONSTEXPR const int  min_exponent10 = __FLT_MIN_10_EXP__;
322338eb311SHoward Hinnant    static _LIBCPP_CONSTEXPR const int  max_exponent = __FLT_MAX_EXP__;
323338eb311SHoward Hinnant    static _LIBCPP_CONSTEXPR const int  max_exponent10 = __FLT_MAX_10_EXP__;
3243e519524SHoward Hinnant
325338eb311SHoward Hinnant    static _LIBCPP_CONSTEXPR const bool has_infinity = true;
326338eb311SHoward Hinnant    static _LIBCPP_CONSTEXPR const bool has_quiet_NaN = true;
327338eb311SHoward Hinnant    static _LIBCPP_CONSTEXPR const bool has_signaling_NaN = true;
328338eb311SHoward Hinnant    static _LIBCPP_CONSTEXPR const float_denorm_style has_denorm = denorm_present;
329338eb311SHoward Hinnant    static _LIBCPP_CONSTEXPR const bool has_denorm_loss = false;
330338eb311SHoward Hinnant    _LIBCPP_INLINE_VISIBILITY static _LIBCPP_CONSTEXPR type infinity() _NOEXCEPT {return __builtin_huge_valf();}
331338eb311SHoward Hinnant    _LIBCPP_INLINE_VISIBILITY static _LIBCPP_CONSTEXPR type quiet_NaN() _NOEXCEPT {return __builtin_nanf("");}
332338eb311SHoward Hinnant    _LIBCPP_INLINE_VISIBILITY static _LIBCPP_CONSTEXPR type signaling_NaN() _NOEXCEPT {return __builtin_nansf("");}
333338eb311SHoward Hinnant    _LIBCPP_INLINE_VISIBILITY static _LIBCPP_CONSTEXPR type denorm_min() _NOEXCEPT {return __FLT_DENORM_MIN__;}
3343e519524SHoward Hinnant
335338eb311SHoward Hinnant    static _LIBCPP_CONSTEXPR const bool is_iec559 = true;
336338eb311SHoward Hinnant    static _LIBCPP_CONSTEXPR const bool is_bounded = true;
337338eb311SHoward Hinnant    static _LIBCPP_CONSTEXPR const bool is_modulo = false;
3383e519524SHoward Hinnant
339338eb311SHoward Hinnant    static _LIBCPP_CONSTEXPR const bool traps = false;
3404745c994SOwen Anderson#if (defined(__arm__) || defined(__aarch64__))
3414745c994SOwen Anderson    static _LIBCPP_CONSTEXPR const bool tinyness_before = true;
3424745c994SOwen Anderson#else
343338eb311SHoward Hinnant    static _LIBCPP_CONSTEXPR const bool tinyness_before = false;
3444745c994SOwen Anderson#endif
345338eb311SHoward Hinnant    static _LIBCPP_CONSTEXPR const float_round_style round_style = round_to_nearest;
3463e519524SHoward Hinnant};
3473e519524SHoward Hinnant
3483e519524SHoward Hinnanttemplate <>
3493e519524SHoward Hinnantclass __libcpp_numeric_limits<double, true>
3503e519524SHoward Hinnant{
3513e519524SHoward Hinnantprotected:
3523e519524SHoward Hinnant    typedef double type;
3533e519524SHoward Hinnant
354338eb311SHoward Hinnant    static _LIBCPP_CONSTEXPR const bool is_specialized = true;
3553e519524SHoward Hinnant
356338eb311SHoward Hinnant    static _LIBCPP_CONSTEXPR const bool is_signed = true;
357338eb311SHoward Hinnant    static _LIBCPP_CONSTEXPR const int  digits = __DBL_MANT_DIG__;
358338eb311SHoward Hinnant    static _LIBCPP_CONSTEXPR const int  digits10 = __DBL_DIG__;
35948798156SEric Fiselier    static _LIBCPP_CONSTEXPR const int  max_digits10 = 2+(digits * 30103l)/100000l;
360338eb311SHoward Hinnant    _LIBCPP_INLINE_VISIBILITY static _LIBCPP_CONSTEXPR type min() _NOEXCEPT {return __DBL_MIN__;}
361338eb311SHoward Hinnant    _LIBCPP_INLINE_VISIBILITY static _LIBCPP_CONSTEXPR type max() _NOEXCEPT {return __DBL_MAX__;}
362338eb311SHoward Hinnant    _LIBCPP_INLINE_VISIBILITY static _LIBCPP_CONSTEXPR type lowest() _NOEXCEPT {return -max();}
3633e519524SHoward Hinnant
364338eb311SHoward Hinnant    static _LIBCPP_CONSTEXPR const bool is_integer = false;
365338eb311SHoward Hinnant    static _LIBCPP_CONSTEXPR const bool is_exact = false;
366338eb311SHoward Hinnant    static _LIBCPP_CONSTEXPR const int  radix = __FLT_RADIX__;
367338eb311SHoward Hinnant    _LIBCPP_INLINE_VISIBILITY static _LIBCPP_CONSTEXPR type epsilon() _NOEXCEPT {return __DBL_EPSILON__;}
368338eb311SHoward Hinnant    _LIBCPP_INLINE_VISIBILITY static _LIBCPP_CONSTEXPR type round_error() _NOEXCEPT {return 0.5;}
3693e519524SHoward Hinnant
370338eb311SHoward Hinnant    static _LIBCPP_CONSTEXPR const int  min_exponent = __DBL_MIN_EXP__;
371338eb311SHoward Hinnant    static _LIBCPP_CONSTEXPR const int  min_exponent10 = __DBL_MIN_10_EXP__;
372338eb311SHoward Hinnant    static _LIBCPP_CONSTEXPR const int  max_exponent = __DBL_MAX_EXP__;
373338eb311SHoward Hinnant    static _LIBCPP_CONSTEXPR const int  max_exponent10 = __DBL_MAX_10_EXP__;
3743e519524SHoward Hinnant
375338eb311SHoward Hinnant    static _LIBCPP_CONSTEXPR const bool has_infinity = true;
376338eb311SHoward Hinnant    static _LIBCPP_CONSTEXPR const bool has_quiet_NaN = true;
377338eb311SHoward Hinnant    static _LIBCPP_CONSTEXPR const bool has_signaling_NaN = true;
378338eb311SHoward Hinnant    static _LIBCPP_CONSTEXPR const float_denorm_style has_denorm = denorm_present;
379338eb311SHoward Hinnant    static _LIBCPP_CONSTEXPR const bool has_denorm_loss = false;
380338eb311SHoward Hinnant    _LIBCPP_INLINE_VISIBILITY static _LIBCPP_CONSTEXPR type infinity() _NOEXCEPT {return __builtin_huge_val();}
381338eb311SHoward Hinnant    _LIBCPP_INLINE_VISIBILITY static _LIBCPP_CONSTEXPR type quiet_NaN() _NOEXCEPT {return __builtin_nan("");}
382338eb311SHoward Hinnant    _LIBCPP_INLINE_VISIBILITY static _LIBCPP_CONSTEXPR type signaling_NaN() _NOEXCEPT {return __builtin_nans("");}
383338eb311SHoward Hinnant    _LIBCPP_INLINE_VISIBILITY static _LIBCPP_CONSTEXPR type denorm_min() _NOEXCEPT {return __DBL_DENORM_MIN__;}
3843e519524SHoward Hinnant
385338eb311SHoward Hinnant    static _LIBCPP_CONSTEXPR const bool is_iec559 = true;
386338eb311SHoward Hinnant    static _LIBCPP_CONSTEXPR const bool is_bounded = true;
387338eb311SHoward Hinnant    static _LIBCPP_CONSTEXPR const bool is_modulo = false;
3883e519524SHoward Hinnant
389338eb311SHoward Hinnant    static _LIBCPP_CONSTEXPR const bool traps = false;
3904745c994SOwen Anderson#if (defined(__arm__) || defined(__aarch64__))
3914745c994SOwen Anderson    static _LIBCPP_CONSTEXPR const bool tinyness_before = true;
3924745c994SOwen Anderson#else
393338eb311SHoward Hinnant    static _LIBCPP_CONSTEXPR const bool tinyness_before = false;
3944745c994SOwen Anderson#endif
395338eb311SHoward Hinnant    static _LIBCPP_CONSTEXPR const float_round_style round_style = round_to_nearest;
3963e519524SHoward Hinnant};
3973e519524SHoward Hinnant
3983e519524SHoward Hinnanttemplate <>
3993e519524SHoward Hinnantclass __libcpp_numeric_limits<long double, true>
4003e519524SHoward Hinnant{
4013e519524SHoward Hinnantprotected:
4023e519524SHoward Hinnant    typedef long double type;
4033e519524SHoward Hinnant
404338eb311SHoward Hinnant    static _LIBCPP_CONSTEXPR const bool is_specialized = true;
4053e519524SHoward Hinnant
406338eb311SHoward Hinnant    static _LIBCPP_CONSTEXPR const bool is_signed = true;
407338eb311SHoward Hinnant    static _LIBCPP_CONSTEXPR const int  digits = __LDBL_MANT_DIG__;
408338eb311SHoward Hinnant    static _LIBCPP_CONSTEXPR const int  digits10 = __LDBL_DIG__;
40948798156SEric Fiselier    static _LIBCPP_CONSTEXPR const int  max_digits10 = 2+(digits * 30103l)/100000l;
410338eb311SHoward Hinnant    _LIBCPP_INLINE_VISIBILITY static _LIBCPP_CONSTEXPR type min() _NOEXCEPT {return __LDBL_MIN__;}
411338eb311SHoward Hinnant    _LIBCPP_INLINE_VISIBILITY static _LIBCPP_CONSTEXPR type max() _NOEXCEPT {return __LDBL_MAX__;}
412338eb311SHoward Hinnant    _LIBCPP_INLINE_VISIBILITY static _LIBCPP_CONSTEXPR type lowest() _NOEXCEPT {return -max();}
4133e519524SHoward Hinnant
414338eb311SHoward Hinnant    static _LIBCPP_CONSTEXPR const bool is_integer = false;
415338eb311SHoward Hinnant    static _LIBCPP_CONSTEXPR const bool is_exact = false;
416338eb311SHoward Hinnant    static _LIBCPP_CONSTEXPR const int  radix = __FLT_RADIX__;
417338eb311SHoward Hinnant    _LIBCPP_INLINE_VISIBILITY static _LIBCPP_CONSTEXPR type epsilon() _NOEXCEPT {return __LDBL_EPSILON__;}
418ba41d3b1SBruce Mitchener    _LIBCPP_INLINE_VISIBILITY static _LIBCPP_CONSTEXPR type round_error() _NOEXCEPT {return 0.5L;}
4193e519524SHoward Hinnant
420338eb311SHoward Hinnant    static _LIBCPP_CONSTEXPR const int  min_exponent = __LDBL_MIN_EXP__;
421338eb311SHoward Hinnant    static _LIBCPP_CONSTEXPR const int  min_exponent10 = __LDBL_MIN_10_EXP__;
422338eb311SHoward Hinnant    static _LIBCPP_CONSTEXPR const int  max_exponent = __LDBL_MAX_EXP__;
423338eb311SHoward Hinnant    static _LIBCPP_CONSTEXPR const int  max_exponent10 = __LDBL_MAX_10_EXP__;
4243e519524SHoward Hinnant
425338eb311SHoward Hinnant    static _LIBCPP_CONSTEXPR const bool has_infinity = true;
426338eb311SHoward Hinnant    static _LIBCPP_CONSTEXPR const bool has_quiet_NaN = true;
427338eb311SHoward Hinnant    static _LIBCPP_CONSTEXPR const bool has_signaling_NaN = true;
428338eb311SHoward Hinnant    static _LIBCPP_CONSTEXPR const float_denorm_style has_denorm = denorm_present;
429338eb311SHoward Hinnant    static _LIBCPP_CONSTEXPR const bool has_denorm_loss = false;
430338eb311SHoward Hinnant    _LIBCPP_INLINE_VISIBILITY static _LIBCPP_CONSTEXPR type infinity() _NOEXCEPT {return __builtin_huge_vall();}
431338eb311SHoward Hinnant    _LIBCPP_INLINE_VISIBILITY static _LIBCPP_CONSTEXPR type quiet_NaN() _NOEXCEPT {return __builtin_nanl("");}
432338eb311SHoward Hinnant    _LIBCPP_INLINE_VISIBILITY static _LIBCPP_CONSTEXPR type signaling_NaN() _NOEXCEPT {return __builtin_nansl("");}
433338eb311SHoward Hinnant    _LIBCPP_INLINE_VISIBILITY static _LIBCPP_CONSTEXPR type denorm_min() _NOEXCEPT {return __LDBL_DENORM_MIN__;}
4343e519524SHoward Hinnant
4353e519524SHoward Hinnant#if (defined(__ppc__) || defined(__ppc64__))
436338eb311SHoward Hinnant    static _LIBCPP_CONSTEXPR const bool is_iec559 = false;
4373e519524SHoward Hinnant#else
438338eb311SHoward Hinnant    static _LIBCPP_CONSTEXPR const bool is_iec559 = true;
4393e519524SHoward Hinnant#endif
440338eb311SHoward Hinnant    static _LIBCPP_CONSTEXPR const bool is_bounded = true;
441338eb311SHoward Hinnant    static _LIBCPP_CONSTEXPR const bool is_modulo = false;
4423e519524SHoward Hinnant
443338eb311SHoward Hinnant    static _LIBCPP_CONSTEXPR const bool traps = false;
4444745c994SOwen Anderson#if (defined(__arm__) || defined(__aarch64__))
4454745c994SOwen Anderson    static _LIBCPP_CONSTEXPR const bool tinyness_before = true;
4464745c994SOwen Anderson#else
447338eb311SHoward Hinnant    static _LIBCPP_CONSTEXPR const bool tinyness_before = false;
4484745c994SOwen Anderson#endif
449338eb311SHoward Hinnant    static _LIBCPP_CONSTEXPR const float_round_style round_style = round_to_nearest;
4503e519524SHoward Hinnant};
4513e519524SHoward Hinnant
4523e519524SHoward Hinnanttemplate <class _Tp>
453e2f2d1edSEric Fiselierclass _LIBCPP_TEMPLATE_VIS numeric_limits
4543e519524SHoward Hinnant    : private __libcpp_numeric_limits<typename remove_cv<_Tp>::type>
4553e519524SHoward Hinnant{
4563e519524SHoward Hinnant    typedef __libcpp_numeric_limits<typename remove_cv<_Tp>::type> __base;
4573e519524SHoward Hinnant    typedef typename __base::type type;
4583e519524SHoward Hinnantpublic:
459338eb311SHoward Hinnant    static _LIBCPP_CONSTEXPR const bool is_specialized = __base::is_specialized;
460338eb311SHoward Hinnant    _LIBCPP_INLINE_VISIBILITY static _LIBCPP_CONSTEXPR type min() _NOEXCEPT {return __base::min();}
461338eb311SHoward Hinnant    _LIBCPP_INLINE_VISIBILITY static _LIBCPP_CONSTEXPR type max() _NOEXCEPT {return __base::max();}
462338eb311SHoward Hinnant    _LIBCPP_INLINE_VISIBILITY static _LIBCPP_CONSTEXPR type lowest() _NOEXCEPT {return __base::lowest();}
4633e519524SHoward Hinnant
464338eb311SHoward Hinnant    static _LIBCPP_CONSTEXPR const int  digits = __base::digits;
465338eb311SHoward Hinnant    static _LIBCPP_CONSTEXPR const int  digits10 = __base::digits10;
466338eb311SHoward Hinnant    static _LIBCPP_CONSTEXPR const int  max_digits10 = __base::max_digits10;
467338eb311SHoward Hinnant    static _LIBCPP_CONSTEXPR const bool is_signed = __base::is_signed;
468338eb311SHoward Hinnant    static _LIBCPP_CONSTEXPR const bool is_integer = __base::is_integer;
469338eb311SHoward Hinnant    static _LIBCPP_CONSTEXPR const bool is_exact = __base::is_exact;
470338eb311SHoward Hinnant    static _LIBCPP_CONSTEXPR const int  radix = __base::radix;
471338eb311SHoward Hinnant    _LIBCPP_INLINE_VISIBILITY static _LIBCPP_CONSTEXPR type epsilon() _NOEXCEPT {return __base::epsilon();}
472338eb311SHoward Hinnant    _LIBCPP_INLINE_VISIBILITY static _LIBCPP_CONSTEXPR type round_error() _NOEXCEPT {return __base::round_error();}
4733e519524SHoward Hinnant
474338eb311SHoward Hinnant    static _LIBCPP_CONSTEXPR const int  min_exponent = __base::min_exponent;
475338eb311SHoward Hinnant    static _LIBCPP_CONSTEXPR const int  min_exponent10 = __base::min_exponent10;
476338eb311SHoward Hinnant    static _LIBCPP_CONSTEXPR const int  max_exponent = __base::max_exponent;
477338eb311SHoward Hinnant    static _LIBCPP_CONSTEXPR const int  max_exponent10 = __base::max_exponent10;
4783e519524SHoward Hinnant
479338eb311SHoward Hinnant    static _LIBCPP_CONSTEXPR const bool has_infinity = __base::has_infinity;
480338eb311SHoward Hinnant    static _LIBCPP_CONSTEXPR const bool has_quiet_NaN = __base::has_quiet_NaN;
481338eb311SHoward Hinnant    static _LIBCPP_CONSTEXPR const bool has_signaling_NaN = __base::has_signaling_NaN;
482338eb311SHoward Hinnant    static _LIBCPP_CONSTEXPR const float_denorm_style has_denorm = __base::has_denorm;
483338eb311SHoward Hinnant    static _LIBCPP_CONSTEXPR const bool has_denorm_loss = __base::has_denorm_loss;
484338eb311SHoward Hinnant    _LIBCPP_INLINE_VISIBILITY static _LIBCPP_CONSTEXPR type infinity() _NOEXCEPT {return __base::infinity();}
485338eb311SHoward Hinnant    _LIBCPP_INLINE_VISIBILITY static _LIBCPP_CONSTEXPR type quiet_NaN() _NOEXCEPT {return __base::quiet_NaN();}
486338eb311SHoward Hinnant    _LIBCPP_INLINE_VISIBILITY static _LIBCPP_CONSTEXPR type signaling_NaN() _NOEXCEPT {return __base::signaling_NaN();}
487338eb311SHoward Hinnant    _LIBCPP_INLINE_VISIBILITY static _LIBCPP_CONSTEXPR type denorm_min() _NOEXCEPT {return __base::denorm_min();}
4883e519524SHoward Hinnant
489338eb311SHoward Hinnant    static _LIBCPP_CONSTEXPR const bool is_iec559 = __base::is_iec559;
490338eb311SHoward Hinnant    static _LIBCPP_CONSTEXPR const bool is_bounded = __base::is_bounded;
491338eb311SHoward Hinnant    static _LIBCPP_CONSTEXPR const bool is_modulo = __base::is_modulo;
4923e519524SHoward Hinnant
493338eb311SHoward Hinnant    static _LIBCPP_CONSTEXPR const bool traps = __base::traps;
494338eb311SHoward Hinnant    static _LIBCPP_CONSTEXPR const bool tinyness_before = __base::tinyness_before;
495338eb311SHoward Hinnant    static _LIBCPP_CONSTEXPR const float_round_style round_style = __base::round_style;
4963e519524SHoward Hinnant};
4973e519524SHoward Hinnant
4983e519524SHoward Hinnanttemplate <class _Tp>
49916694b5dSHoward Hinnant    _LIBCPP_CONSTEXPR const bool numeric_limits<_Tp>::is_specialized;
50016694b5dSHoward Hinnanttemplate <class _Tp>
50116694b5dSHoward Hinnant    _LIBCPP_CONSTEXPR const int numeric_limits<_Tp>::digits;
50216694b5dSHoward Hinnanttemplate <class _Tp>
50316694b5dSHoward Hinnant    _LIBCPP_CONSTEXPR const int numeric_limits<_Tp>::digits10;
50416694b5dSHoward Hinnanttemplate <class _Tp>
50516694b5dSHoward Hinnant    _LIBCPP_CONSTEXPR const int numeric_limits<_Tp>::max_digits10;
50616694b5dSHoward Hinnanttemplate <class _Tp>
50716694b5dSHoward Hinnant    _LIBCPP_CONSTEXPR const bool numeric_limits<_Tp>::is_signed;
50816694b5dSHoward Hinnanttemplate <class _Tp>
50916694b5dSHoward Hinnant    _LIBCPP_CONSTEXPR const bool numeric_limits<_Tp>::is_integer;
51016694b5dSHoward Hinnanttemplate <class _Tp>
51116694b5dSHoward Hinnant    _LIBCPP_CONSTEXPR const bool numeric_limits<_Tp>::is_exact;
51216694b5dSHoward Hinnanttemplate <class _Tp>
51316694b5dSHoward Hinnant    _LIBCPP_CONSTEXPR const int numeric_limits<_Tp>::radix;
51416694b5dSHoward Hinnanttemplate <class _Tp>
51516694b5dSHoward Hinnant    _LIBCPP_CONSTEXPR const int numeric_limits<_Tp>::min_exponent;
51616694b5dSHoward Hinnanttemplate <class _Tp>
51716694b5dSHoward Hinnant    _LIBCPP_CONSTEXPR const int numeric_limits<_Tp>::min_exponent10;
51816694b5dSHoward Hinnanttemplate <class _Tp>
51916694b5dSHoward Hinnant    _LIBCPP_CONSTEXPR const int numeric_limits<_Tp>::max_exponent;
52016694b5dSHoward Hinnanttemplate <class _Tp>
52116694b5dSHoward Hinnant    _LIBCPP_CONSTEXPR const int numeric_limits<_Tp>::max_exponent10;
52216694b5dSHoward Hinnanttemplate <class _Tp>
52316694b5dSHoward Hinnant    _LIBCPP_CONSTEXPR const bool numeric_limits<_Tp>::has_infinity;
52416694b5dSHoward Hinnanttemplate <class _Tp>
52516694b5dSHoward Hinnant    _LIBCPP_CONSTEXPR const bool numeric_limits<_Tp>::has_quiet_NaN;
52616694b5dSHoward Hinnanttemplate <class _Tp>
52716694b5dSHoward Hinnant    _LIBCPP_CONSTEXPR const bool numeric_limits<_Tp>::has_signaling_NaN;
52816694b5dSHoward Hinnanttemplate <class _Tp>
52916694b5dSHoward Hinnant    _LIBCPP_CONSTEXPR const float_denorm_style numeric_limits<_Tp>::has_denorm;
53016694b5dSHoward Hinnanttemplate <class _Tp>
53116694b5dSHoward Hinnant    _LIBCPP_CONSTEXPR const bool numeric_limits<_Tp>::has_denorm_loss;
53216694b5dSHoward Hinnanttemplate <class _Tp>
53316694b5dSHoward Hinnant    _LIBCPP_CONSTEXPR const bool numeric_limits<_Tp>::is_iec559;
53416694b5dSHoward Hinnanttemplate <class _Tp>
53516694b5dSHoward Hinnant    _LIBCPP_CONSTEXPR const bool numeric_limits<_Tp>::is_bounded;
53616694b5dSHoward Hinnanttemplate <class _Tp>
53716694b5dSHoward Hinnant    _LIBCPP_CONSTEXPR const bool numeric_limits<_Tp>::is_modulo;
53816694b5dSHoward Hinnanttemplate <class _Tp>
53916694b5dSHoward Hinnant    _LIBCPP_CONSTEXPR const bool numeric_limits<_Tp>::traps;
54016694b5dSHoward Hinnanttemplate <class _Tp>
54116694b5dSHoward Hinnant    _LIBCPP_CONSTEXPR const bool numeric_limits<_Tp>::tinyness_before;
54216694b5dSHoward Hinnanttemplate <class _Tp>
54316694b5dSHoward Hinnant    _LIBCPP_CONSTEXPR const float_round_style numeric_limits<_Tp>::round_style;
54416694b5dSHoward Hinnant
54516694b5dSHoward Hinnanttemplate <class _Tp>
546e2f2d1edSEric Fiselierclass _LIBCPP_TEMPLATE_VIS numeric_limits<const _Tp>
5473e519524SHoward Hinnant    : private numeric_limits<_Tp>
5483e519524SHoward Hinnant{
5493e519524SHoward Hinnant    typedef numeric_limits<_Tp> __base;
5503e519524SHoward Hinnant    typedef _Tp type;
5513e519524SHoward Hinnantpublic:
552338eb311SHoward Hinnant    static _LIBCPP_CONSTEXPR const bool is_specialized = __base::is_specialized;
553338eb311SHoward Hinnant    _LIBCPP_INLINE_VISIBILITY static _LIBCPP_CONSTEXPR type min() _NOEXCEPT {return __base::min();}
554338eb311SHoward Hinnant    _LIBCPP_INLINE_VISIBILITY static _LIBCPP_CONSTEXPR type max() _NOEXCEPT {return __base::max();}
555338eb311SHoward Hinnant    _LIBCPP_INLINE_VISIBILITY static _LIBCPP_CONSTEXPR type lowest() _NOEXCEPT {return __base::lowest();}
5563e519524SHoward Hinnant
557338eb311SHoward Hinnant    static _LIBCPP_CONSTEXPR const int  digits = __base::digits;
558338eb311SHoward Hinnant    static _LIBCPP_CONSTEXPR const int  digits10 = __base::digits10;
559338eb311SHoward Hinnant    static _LIBCPP_CONSTEXPR const int  max_digits10 = __base::max_digits10;
560338eb311SHoward Hinnant    static _LIBCPP_CONSTEXPR const bool is_signed = __base::is_signed;
561338eb311SHoward Hinnant    static _LIBCPP_CONSTEXPR const bool is_integer = __base::is_integer;
562338eb311SHoward Hinnant    static _LIBCPP_CONSTEXPR const bool is_exact = __base::is_exact;
563338eb311SHoward Hinnant    static _LIBCPP_CONSTEXPR const int  radix = __base::radix;
564338eb311SHoward Hinnant    _LIBCPP_INLINE_VISIBILITY static _LIBCPP_CONSTEXPR type epsilon() _NOEXCEPT {return __base::epsilon();}
565338eb311SHoward Hinnant    _LIBCPP_INLINE_VISIBILITY static _LIBCPP_CONSTEXPR type round_error() _NOEXCEPT {return __base::round_error();}
5663e519524SHoward Hinnant
567338eb311SHoward Hinnant    static _LIBCPP_CONSTEXPR const int  min_exponent = __base::min_exponent;
568338eb311SHoward Hinnant    static _LIBCPP_CONSTEXPR const int  min_exponent10 = __base::min_exponent10;
569338eb311SHoward Hinnant    static _LIBCPP_CONSTEXPR const int  max_exponent = __base::max_exponent;
570338eb311SHoward Hinnant    static _LIBCPP_CONSTEXPR const int  max_exponent10 = __base::max_exponent10;
5713e519524SHoward Hinnant
572338eb311SHoward Hinnant    static _LIBCPP_CONSTEXPR const bool has_infinity = __base::has_infinity;
573338eb311SHoward Hinnant    static _LIBCPP_CONSTEXPR const bool has_quiet_NaN = __base::has_quiet_NaN;
574338eb311SHoward Hinnant    static _LIBCPP_CONSTEXPR const bool has_signaling_NaN = __base::has_signaling_NaN;
575338eb311SHoward Hinnant    static _LIBCPP_CONSTEXPR const float_denorm_style has_denorm = __base::has_denorm;
576338eb311SHoward Hinnant    static _LIBCPP_CONSTEXPR const bool has_denorm_loss = __base::has_denorm_loss;
577338eb311SHoward Hinnant    _LIBCPP_INLINE_VISIBILITY static _LIBCPP_CONSTEXPR type infinity() _NOEXCEPT {return __base::infinity();}
578338eb311SHoward Hinnant    _LIBCPP_INLINE_VISIBILITY static _LIBCPP_CONSTEXPR type quiet_NaN() _NOEXCEPT {return __base::quiet_NaN();}
579338eb311SHoward Hinnant    _LIBCPP_INLINE_VISIBILITY static _LIBCPP_CONSTEXPR type signaling_NaN() _NOEXCEPT {return __base::signaling_NaN();}
580338eb311SHoward Hinnant    _LIBCPP_INLINE_VISIBILITY static _LIBCPP_CONSTEXPR type denorm_min() _NOEXCEPT {return __base::denorm_min();}
5813e519524SHoward Hinnant
582338eb311SHoward Hinnant    static _LIBCPP_CONSTEXPR const bool is_iec559 = __base::is_iec559;
583338eb311SHoward Hinnant    static _LIBCPP_CONSTEXPR const bool is_bounded = __base::is_bounded;
584338eb311SHoward Hinnant    static _LIBCPP_CONSTEXPR const bool is_modulo = __base::is_modulo;
5853e519524SHoward Hinnant
586338eb311SHoward Hinnant    static _LIBCPP_CONSTEXPR const bool traps = __base::traps;
587338eb311SHoward Hinnant    static _LIBCPP_CONSTEXPR const bool tinyness_before = __base::tinyness_before;
588338eb311SHoward Hinnant    static _LIBCPP_CONSTEXPR const float_round_style round_style = __base::round_style;
5893e519524SHoward Hinnant};
5903e519524SHoward Hinnant
5913e519524SHoward Hinnanttemplate <class _Tp>
59216694b5dSHoward Hinnant    _LIBCPP_CONSTEXPR const bool numeric_limits<const _Tp>::is_specialized;
59316694b5dSHoward Hinnanttemplate <class _Tp>
59416694b5dSHoward Hinnant    _LIBCPP_CONSTEXPR const int numeric_limits<const _Tp>::digits;
59516694b5dSHoward Hinnanttemplate <class _Tp>
59616694b5dSHoward Hinnant    _LIBCPP_CONSTEXPR const int numeric_limits<const _Tp>::digits10;
59716694b5dSHoward Hinnanttemplate <class _Tp>
59816694b5dSHoward Hinnant    _LIBCPP_CONSTEXPR const int numeric_limits<const _Tp>::max_digits10;
59916694b5dSHoward Hinnanttemplate <class _Tp>
60016694b5dSHoward Hinnant    _LIBCPP_CONSTEXPR const bool numeric_limits<const _Tp>::is_signed;
60116694b5dSHoward Hinnanttemplate <class _Tp>
60216694b5dSHoward Hinnant    _LIBCPP_CONSTEXPR const bool numeric_limits<const _Tp>::is_integer;
60316694b5dSHoward Hinnanttemplate <class _Tp>
60416694b5dSHoward Hinnant    _LIBCPP_CONSTEXPR const bool numeric_limits<const _Tp>::is_exact;
60516694b5dSHoward Hinnanttemplate <class _Tp>
60616694b5dSHoward Hinnant    _LIBCPP_CONSTEXPR const int numeric_limits<const _Tp>::radix;
60716694b5dSHoward Hinnanttemplate <class _Tp>
60816694b5dSHoward Hinnant    _LIBCPP_CONSTEXPR const int numeric_limits<const _Tp>::min_exponent;
60916694b5dSHoward Hinnanttemplate <class _Tp>
61016694b5dSHoward Hinnant    _LIBCPP_CONSTEXPR const int numeric_limits<const _Tp>::min_exponent10;
61116694b5dSHoward Hinnanttemplate <class _Tp>
61216694b5dSHoward Hinnant    _LIBCPP_CONSTEXPR const int numeric_limits<const _Tp>::max_exponent;
61316694b5dSHoward Hinnanttemplate <class _Tp>
61416694b5dSHoward Hinnant    _LIBCPP_CONSTEXPR const int numeric_limits<const _Tp>::max_exponent10;
61516694b5dSHoward Hinnanttemplate <class _Tp>
61616694b5dSHoward Hinnant    _LIBCPP_CONSTEXPR const bool numeric_limits<const _Tp>::has_infinity;
61716694b5dSHoward Hinnanttemplate <class _Tp>
61816694b5dSHoward Hinnant    _LIBCPP_CONSTEXPR const bool numeric_limits<const _Tp>::has_quiet_NaN;
61916694b5dSHoward Hinnanttemplate <class _Tp>
62016694b5dSHoward Hinnant    _LIBCPP_CONSTEXPR const bool numeric_limits<const _Tp>::has_signaling_NaN;
62116694b5dSHoward Hinnanttemplate <class _Tp>
62216694b5dSHoward Hinnant    _LIBCPP_CONSTEXPR const float_denorm_style numeric_limits<const _Tp>::has_denorm;
62316694b5dSHoward Hinnanttemplate <class _Tp>
62416694b5dSHoward Hinnant    _LIBCPP_CONSTEXPR const bool numeric_limits<const _Tp>::has_denorm_loss;
62516694b5dSHoward Hinnanttemplate <class _Tp>
62616694b5dSHoward Hinnant    _LIBCPP_CONSTEXPR const bool numeric_limits<const _Tp>::is_iec559;
62716694b5dSHoward Hinnanttemplate <class _Tp>
62816694b5dSHoward Hinnant    _LIBCPP_CONSTEXPR const bool numeric_limits<const _Tp>::is_bounded;
62916694b5dSHoward Hinnanttemplate <class _Tp>
63016694b5dSHoward Hinnant    _LIBCPP_CONSTEXPR const bool numeric_limits<const _Tp>::is_modulo;
63116694b5dSHoward Hinnanttemplate <class _Tp>
63216694b5dSHoward Hinnant    _LIBCPP_CONSTEXPR const bool numeric_limits<const _Tp>::traps;
63316694b5dSHoward Hinnanttemplate <class _Tp>
63416694b5dSHoward Hinnant    _LIBCPP_CONSTEXPR const bool numeric_limits<const _Tp>::tinyness_before;
63516694b5dSHoward Hinnanttemplate <class _Tp>
63616694b5dSHoward Hinnant    _LIBCPP_CONSTEXPR const float_round_style numeric_limits<const _Tp>::round_style;
63716694b5dSHoward Hinnant
63816694b5dSHoward Hinnanttemplate <class _Tp>
639e2f2d1edSEric Fiselierclass _LIBCPP_TEMPLATE_VIS numeric_limits<volatile _Tp>
6403e519524SHoward Hinnant    : private numeric_limits<_Tp>
6413e519524SHoward Hinnant{
6423e519524SHoward Hinnant    typedef numeric_limits<_Tp> __base;
6433e519524SHoward Hinnant    typedef _Tp type;
6443e519524SHoward Hinnantpublic:
645338eb311SHoward Hinnant    static _LIBCPP_CONSTEXPR const bool is_specialized = __base::is_specialized;
646338eb311SHoward Hinnant    _LIBCPP_INLINE_VISIBILITY static _LIBCPP_CONSTEXPR type min() _NOEXCEPT {return __base::min();}
647338eb311SHoward Hinnant    _LIBCPP_INLINE_VISIBILITY static _LIBCPP_CONSTEXPR type max() _NOEXCEPT {return __base::max();}
648338eb311SHoward Hinnant    _LIBCPP_INLINE_VISIBILITY static _LIBCPP_CONSTEXPR type lowest() _NOEXCEPT {return __base::lowest();}
6493e519524SHoward Hinnant
650338eb311SHoward Hinnant    static _LIBCPP_CONSTEXPR const int  digits = __base::digits;
651338eb311SHoward Hinnant    static _LIBCPP_CONSTEXPR const int  digits10 = __base::digits10;
652338eb311SHoward Hinnant    static _LIBCPP_CONSTEXPR const int  max_digits10 = __base::max_digits10;
653338eb311SHoward Hinnant    static _LIBCPP_CONSTEXPR const bool is_signed = __base::is_signed;
654338eb311SHoward Hinnant    static _LIBCPP_CONSTEXPR const bool is_integer = __base::is_integer;
655338eb311SHoward Hinnant    static _LIBCPP_CONSTEXPR const bool is_exact = __base::is_exact;
656338eb311SHoward Hinnant    static _LIBCPP_CONSTEXPR const int  radix = __base::radix;
657338eb311SHoward Hinnant    _LIBCPP_INLINE_VISIBILITY static _LIBCPP_CONSTEXPR type epsilon() _NOEXCEPT {return __base::epsilon();}
658338eb311SHoward Hinnant    _LIBCPP_INLINE_VISIBILITY static _LIBCPP_CONSTEXPR type round_error() _NOEXCEPT {return __base::round_error();}
6593e519524SHoward Hinnant
660338eb311SHoward Hinnant    static _LIBCPP_CONSTEXPR const int  min_exponent = __base::min_exponent;
661338eb311SHoward Hinnant    static _LIBCPP_CONSTEXPR const int  min_exponent10 = __base::min_exponent10;
662338eb311SHoward Hinnant    static _LIBCPP_CONSTEXPR const int  max_exponent = __base::max_exponent;
663338eb311SHoward Hinnant    static _LIBCPP_CONSTEXPR const int  max_exponent10 = __base::max_exponent10;
6643e519524SHoward Hinnant
665338eb311SHoward Hinnant    static _LIBCPP_CONSTEXPR const bool has_infinity = __base::has_infinity;
666338eb311SHoward Hinnant    static _LIBCPP_CONSTEXPR const bool has_quiet_NaN = __base::has_quiet_NaN;
667338eb311SHoward Hinnant    static _LIBCPP_CONSTEXPR const bool has_signaling_NaN = __base::has_signaling_NaN;
668338eb311SHoward Hinnant    static _LIBCPP_CONSTEXPR const float_denorm_style has_denorm = __base::has_denorm;
669338eb311SHoward Hinnant    static _LIBCPP_CONSTEXPR const bool has_denorm_loss = __base::has_denorm_loss;
670338eb311SHoward Hinnant    _LIBCPP_INLINE_VISIBILITY static _LIBCPP_CONSTEXPR type infinity() _NOEXCEPT {return __base::infinity();}
671338eb311SHoward Hinnant    _LIBCPP_INLINE_VISIBILITY static _LIBCPP_CONSTEXPR type quiet_NaN() _NOEXCEPT {return __base::quiet_NaN();}
672338eb311SHoward Hinnant    _LIBCPP_INLINE_VISIBILITY static _LIBCPP_CONSTEXPR type signaling_NaN() _NOEXCEPT {return __base::signaling_NaN();}
673338eb311SHoward Hinnant    _LIBCPP_INLINE_VISIBILITY static _LIBCPP_CONSTEXPR type denorm_min() _NOEXCEPT {return __base::denorm_min();}
6743e519524SHoward Hinnant
675338eb311SHoward Hinnant    static _LIBCPP_CONSTEXPR const bool is_iec559 = __base::is_iec559;
676338eb311SHoward Hinnant    static _LIBCPP_CONSTEXPR const bool is_bounded = __base::is_bounded;
677338eb311SHoward Hinnant    static _LIBCPP_CONSTEXPR const bool is_modulo = __base::is_modulo;
6783e519524SHoward Hinnant
679338eb311SHoward Hinnant    static _LIBCPP_CONSTEXPR const bool traps = __base::traps;
680338eb311SHoward Hinnant    static _LIBCPP_CONSTEXPR const bool tinyness_before = __base::tinyness_before;
681338eb311SHoward Hinnant    static _LIBCPP_CONSTEXPR const float_round_style round_style = __base::round_style;
6823e519524SHoward Hinnant};
6833e519524SHoward Hinnant
6843e519524SHoward Hinnanttemplate <class _Tp>
68516694b5dSHoward Hinnant    _LIBCPP_CONSTEXPR const bool numeric_limits<volatile _Tp>::is_specialized;
68616694b5dSHoward Hinnanttemplate <class _Tp>
68716694b5dSHoward Hinnant    _LIBCPP_CONSTEXPR const int numeric_limits<volatile _Tp>::digits;
68816694b5dSHoward Hinnanttemplate <class _Tp>
68916694b5dSHoward Hinnant    _LIBCPP_CONSTEXPR const int numeric_limits<volatile _Tp>::digits10;
69016694b5dSHoward Hinnanttemplate <class _Tp>
69116694b5dSHoward Hinnant    _LIBCPP_CONSTEXPR const int numeric_limits<volatile _Tp>::max_digits10;
69216694b5dSHoward Hinnanttemplate <class _Tp>
69316694b5dSHoward Hinnant    _LIBCPP_CONSTEXPR const bool numeric_limits<volatile _Tp>::is_signed;
69416694b5dSHoward Hinnanttemplate <class _Tp>
69516694b5dSHoward Hinnant    _LIBCPP_CONSTEXPR const bool numeric_limits<volatile _Tp>::is_integer;
69616694b5dSHoward Hinnanttemplate <class _Tp>
69716694b5dSHoward Hinnant    _LIBCPP_CONSTEXPR const bool numeric_limits<volatile _Tp>::is_exact;
69816694b5dSHoward Hinnanttemplate <class _Tp>
69916694b5dSHoward Hinnant    _LIBCPP_CONSTEXPR const int numeric_limits<volatile _Tp>::radix;
70016694b5dSHoward Hinnanttemplate <class _Tp>
70116694b5dSHoward Hinnant    _LIBCPP_CONSTEXPR const int numeric_limits<volatile _Tp>::min_exponent;
70216694b5dSHoward Hinnanttemplate <class _Tp>
70316694b5dSHoward Hinnant    _LIBCPP_CONSTEXPR const int numeric_limits<volatile _Tp>::min_exponent10;
70416694b5dSHoward Hinnanttemplate <class _Tp>
70516694b5dSHoward Hinnant    _LIBCPP_CONSTEXPR const int numeric_limits<volatile _Tp>::max_exponent;
70616694b5dSHoward Hinnanttemplate <class _Tp>
70716694b5dSHoward Hinnant    _LIBCPP_CONSTEXPR const int numeric_limits<volatile _Tp>::max_exponent10;
70816694b5dSHoward Hinnanttemplate <class _Tp>
70916694b5dSHoward Hinnant    _LIBCPP_CONSTEXPR const bool numeric_limits<volatile _Tp>::has_infinity;
71016694b5dSHoward Hinnanttemplate <class _Tp>
71116694b5dSHoward Hinnant    _LIBCPP_CONSTEXPR const bool numeric_limits<volatile _Tp>::has_quiet_NaN;
71216694b5dSHoward Hinnanttemplate <class _Tp>
71316694b5dSHoward Hinnant    _LIBCPP_CONSTEXPR const bool numeric_limits<volatile _Tp>::has_signaling_NaN;
71416694b5dSHoward Hinnanttemplate <class _Tp>
71516694b5dSHoward Hinnant    _LIBCPP_CONSTEXPR const float_denorm_style numeric_limits<volatile _Tp>::has_denorm;
71616694b5dSHoward Hinnanttemplate <class _Tp>
71716694b5dSHoward Hinnant    _LIBCPP_CONSTEXPR const bool numeric_limits<volatile _Tp>::has_denorm_loss;
71816694b5dSHoward Hinnanttemplate <class _Tp>
71916694b5dSHoward Hinnant    _LIBCPP_CONSTEXPR const bool numeric_limits<volatile _Tp>::is_iec559;
72016694b5dSHoward Hinnanttemplate <class _Tp>
72116694b5dSHoward Hinnant    _LIBCPP_CONSTEXPR const bool numeric_limits<volatile _Tp>::is_bounded;
72216694b5dSHoward Hinnanttemplate <class _Tp>
72316694b5dSHoward Hinnant    _LIBCPP_CONSTEXPR const bool numeric_limits<volatile _Tp>::is_modulo;
72416694b5dSHoward Hinnanttemplate <class _Tp>
72516694b5dSHoward Hinnant    _LIBCPP_CONSTEXPR const bool numeric_limits<volatile _Tp>::traps;
72616694b5dSHoward Hinnanttemplate <class _Tp>
72716694b5dSHoward Hinnant    _LIBCPP_CONSTEXPR const bool numeric_limits<volatile _Tp>::tinyness_before;
72816694b5dSHoward Hinnanttemplate <class _Tp>
72916694b5dSHoward Hinnant    _LIBCPP_CONSTEXPR const float_round_style numeric_limits<volatile _Tp>::round_style;
73016694b5dSHoward Hinnant
73116694b5dSHoward Hinnanttemplate <class _Tp>
732e2f2d1edSEric Fiselierclass _LIBCPP_TEMPLATE_VIS numeric_limits<const volatile _Tp>
7333e519524SHoward Hinnant    : private numeric_limits<_Tp>
7343e519524SHoward Hinnant{
7353e519524SHoward Hinnant    typedef numeric_limits<_Tp> __base;
7363e519524SHoward Hinnant    typedef _Tp type;
7373e519524SHoward Hinnantpublic:
738338eb311SHoward Hinnant    static _LIBCPP_CONSTEXPR const bool is_specialized = __base::is_specialized;
739338eb311SHoward Hinnant    _LIBCPP_INLINE_VISIBILITY static _LIBCPP_CONSTEXPR type min() _NOEXCEPT {return __base::min();}
740338eb311SHoward Hinnant    _LIBCPP_INLINE_VISIBILITY static _LIBCPP_CONSTEXPR type max() _NOEXCEPT {return __base::max();}
741338eb311SHoward Hinnant    _LIBCPP_INLINE_VISIBILITY static _LIBCPP_CONSTEXPR type lowest() _NOEXCEPT {return __base::lowest();}
7423e519524SHoward Hinnant
743338eb311SHoward Hinnant    static _LIBCPP_CONSTEXPR const int  digits = __base::digits;
744338eb311SHoward Hinnant    static _LIBCPP_CONSTEXPR const int  digits10 = __base::digits10;
745338eb311SHoward Hinnant    static _LIBCPP_CONSTEXPR const int  max_digits10 = __base::max_digits10;
746338eb311SHoward Hinnant    static _LIBCPP_CONSTEXPR const bool is_signed = __base::is_signed;
747338eb311SHoward Hinnant    static _LIBCPP_CONSTEXPR const bool is_integer = __base::is_integer;
748338eb311SHoward Hinnant    static _LIBCPP_CONSTEXPR const bool is_exact = __base::is_exact;
749338eb311SHoward Hinnant    static _LIBCPP_CONSTEXPR const int  radix = __base::radix;
750338eb311SHoward Hinnant    _LIBCPP_INLINE_VISIBILITY static _LIBCPP_CONSTEXPR type epsilon() _NOEXCEPT {return __base::epsilon();}
751338eb311SHoward Hinnant    _LIBCPP_INLINE_VISIBILITY static _LIBCPP_CONSTEXPR type round_error() _NOEXCEPT {return __base::round_error();}
7523e519524SHoward Hinnant
753338eb311SHoward Hinnant    static _LIBCPP_CONSTEXPR const int  min_exponent = __base::min_exponent;
754338eb311SHoward Hinnant    static _LIBCPP_CONSTEXPR const int  min_exponent10 = __base::min_exponent10;
755338eb311SHoward Hinnant    static _LIBCPP_CONSTEXPR const int  max_exponent = __base::max_exponent;
756338eb311SHoward Hinnant    static _LIBCPP_CONSTEXPR const int  max_exponent10 = __base::max_exponent10;
7573e519524SHoward Hinnant
758338eb311SHoward Hinnant    static _LIBCPP_CONSTEXPR const bool has_infinity = __base::has_infinity;
759338eb311SHoward Hinnant    static _LIBCPP_CONSTEXPR const bool has_quiet_NaN = __base::has_quiet_NaN;
760338eb311SHoward Hinnant    static _LIBCPP_CONSTEXPR const bool has_signaling_NaN = __base::has_signaling_NaN;
761338eb311SHoward Hinnant    static _LIBCPP_CONSTEXPR const float_denorm_style has_denorm = __base::has_denorm;
762338eb311SHoward Hinnant    static _LIBCPP_CONSTEXPR const bool has_denorm_loss = __base::has_denorm_loss;
763338eb311SHoward Hinnant    _LIBCPP_INLINE_VISIBILITY static _LIBCPP_CONSTEXPR type infinity() _NOEXCEPT {return __base::infinity();}
764338eb311SHoward Hinnant    _LIBCPP_INLINE_VISIBILITY static _LIBCPP_CONSTEXPR type quiet_NaN() _NOEXCEPT {return __base::quiet_NaN();}
765338eb311SHoward Hinnant    _LIBCPP_INLINE_VISIBILITY static _LIBCPP_CONSTEXPR type signaling_NaN() _NOEXCEPT {return __base::signaling_NaN();}
766338eb311SHoward Hinnant    _LIBCPP_INLINE_VISIBILITY static _LIBCPP_CONSTEXPR type denorm_min() _NOEXCEPT {return __base::denorm_min();}
7673e519524SHoward Hinnant
768338eb311SHoward Hinnant    static _LIBCPP_CONSTEXPR const bool is_iec559 = __base::is_iec559;
769338eb311SHoward Hinnant    static _LIBCPP_CONSTEXPR const bool is_bounded = __base::is_bounded;
770338eb311SHoward Hinnant    static _LIBCPP_CONSTEXPR const bool is_modulo = __base::is_modulo;
7713e519524SHoward Hinnant
772338eb311SHoward Hinnant    static _LIBCPP_CONSTEXPR const bool traps = __base::traps;
773338eb311SHoward Hinnant    static _LIBCPP_CONSTEXPR const bool tinyness_before = __base::tinyness_before;
774338eb311SHoward Hinnant    static _LIBCPP_CONSTEXPR const float_round_style round_style = __base::round_style;
7753e519524SHoward Hinnant};
7763e519524SHoward Hinnant
77716694b5dSHoward Hinnanttemplate <class _Tp>
77816694b5dSHoward Hinnant    _LIBCPP_CONSTEXPR const bool numeric_limits<const volatile _Tp>::is_specialized;
77916694b5dSHoward Hinnanttemplate <class _Tp>
78016694b5dSHoward Hinnant    _LIBCPP_CONSTEXPR const int numeric_limits<const volatile _Tp>::digits;
78116694b5dSHoward Hinnanttemplate <class _Tp>
78216694b5dSHoward Hinnant    _LIBCPP_CONSTEXPR const int numeric_limits<const volatile _Tp>::digits10;
78316694b5dSHoward Hinnanttemplate <class _Tp>
7849e354887SNico Weber    _LIBCPP_CONSTEXPR const int numeric_limits<const volatile _Tp>::max_digits10;
78516694b5dSHoward Hinnanttemplate <class _Tp>
78616694b5dSHoward Hinnant    _LIBCPP_CONSTEXPR const bool numeric_limits<const volatile _Tp>::is_signed;
78716694b5dSHoward Hinnanttemplate <class _Tp>
78816694b5dSHoward Hinnant    _LIBCPP_CONSTEXPR const bool numeric_limits<const volatile _Tp>::is_integer;
78916694b5dSHoward Hinnanttemplate <class _Tp>
79016694b5dSHoward Hinnant    _LIBCPP_CONSTEXPR const bool numeric_limits<const volatile _Tp>::is_exact;
79116694b5dSHoward Hinnanttemplate <class _Tp>
79216694b5dSHoward Hinnant    _LIBCPP_CONSTEXPR const int numeric_limits<const volatile _Tp>::radix;
79316694b5dSHoward Hinnanttemplate <class _Tp>
79416694b5dSHoward Hinnant    _LIBCPP_CONSTEXPR const int numeric_limits<const volatile _Tp>::min_exponent;
79516694b5dSHoward Hinnanttemplate <class _Tp>
79616694b5dSHoward Hinnant    _LIBCPP_CONSTEXPR const int numeric_limits<const volatile _Tp>::min_exponent10;
79716694b5dSHoward Hinnanttemplate <class _Tp>
79816694b5dSHoward Hinnant    _LIBCPP_CONSTEXPR const int numeric_limits<const volatile _Tp>::max_exponent;
79916694b5dSHoward Hinnanttemplate <class _Tp>
80016694b5dSHoward Hinnant    _LIBCPP_CONSTEXPR const int numeric_limits<const volatile _Tp>::max_exponent10;
80116694b5dSHoward Hinnanttemplate <class _Tp>
80216694b5dSHoward Hinnant    _LIBCPP_CONSTEXPR const bool numeric_limits<const volatile _Tp>::has_infinity;
80316694b5dSHoward Hinnanttemplate <class _Tp>
80416694b5dSHoward Hinnant    _LIBCPP_CONSTEXPR const bool numeric_limits<const volatile _Tp>::has_quiet_NaN;
80516694b5dSHoward Hinnanttemplate <class _Tp>
80616694b5dSHoward Hinnant    _LIBCPP_CONSTEXPR const bool numeric_limits<const volatile _Tp>::has_signaling_NaN;
80716694b5dSHoward Hinnanttemplate <class _Tp>
80816694b5dSHoward Hinnant    _LIBCPP_CONSTEXPR const float_denorm_style numeric_limits<const volatile _Tp>::has_denorm;
80916694b5dSHoward Hinnanttemplate <class _Tp>
81016694b5dSHoward Hinnant    _LIBCPP_CONSTEXPR const bool numeric_limits<const volatile _Tp>::has_denorm_loss;
81116694b5dSHoward Hinnanttemplate <class _Tp>
81216694b5dSHoward Hinnant    _LIBCPP_CONSTEXPR const bool numeric_limits<const volatile _Tp>::is_iec559;
81316694b5dSHoward Hinnanttemplate <class _Tp>
81416694b5dSHoward Hinnant    _LIBCPP_CONSTEXPR const bool numeric_limits<const volatile _Tp>::is_bounded;
81516694b5dSHoward Hinnanttemplate <class _Tp>
81616694b5dSHoward Hinnant    _LIBCPP_CONSTEXPR const bool numeric_limits<const volatile _Tp>::is_modulo;
81716694b5dSHoward Hinnanttemplate <class _Tp>
81816694b5dSHoward Hinnant    _LIBCPP_CONSTEXPR const bool numeric_limits<const volatile _Tp>::traps;
81916694b5dSHoward Hinnanttemplate <class _Tp>
82016694b5dSHoward Hinnant    _LIBCPP_CONSTEXPR const bool numeric_limits<const volatile _Tp>::tinyness_before;
82116694b5dSHoward Hinnanttemplate <class _Tp>
82216694b5dSHoward Hinnant    _LIBCPP_CONSTEXPR const float_round_style numeric_limits<const volatile _Tp>::round_style;
82316694b5dSHoward Hinnant
8243e519524SHoward Hinnant_LIBCPP_END_NAMESPACE_STD
8253e519524SHoward Hinnant
826a016efb1SEric Fiselier_LIBCPP_POP_MACROS
827a016efb1SEric Fiselier
8283e519524SHoward Hinnant#endif // _LIBCPP_LIMITS
829