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