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