1*0b57cec5SDimitry Andric// -*- C++ -*- 2*0b57cec5SDimitry Andric//===---------------------------- limits ----------------------------------===// 3*0b57cec5SDimitry Andric// 4*0b57cec5SDimitry Andric// Part of the LLVM Project, under the Apache License v2.0 with LLVM Exceptions. 5*0b57cec5SDimitry Andric// See https://llvm.org/LICENSE.txt for license information. 6*0b57cec5SDimitry Andric// SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception 7*0b57cec5SDimitry Andric// 8*0b57cec5SDimitry Andric//===----------------------------------------------------------------------===// 9*0b57cec5SDimitry Andric 10*0b57cec5SDimitry Andric#ifndef _LIBCPP_LIMITS 11*0b57cec5SDimitry Andric#define _LIBCPP_LIMITS 12*0b57cec5SDimitry Andric 13*0b57cec5SDimitry Andric/* 14*0b57cec5SDimitry Andric limits synopsis 15*0b57cec5SDimitry Andric 16*0b57cec5SDimitry Andricnamespace std 17*0b57cec5SDimitry Andric{ 18*0b57cec5SDimitry Andric 19*0b57cec5SDimitry Andrictemplate<class T> 20*0b57cec5SDimitry Andricclass numeric_limits 21*0b57cec5SDimitry Andric{ 22*0b57cec5SDimitry Andricpublic: 23*0b57cec5SDimitry Andric static constexpr bool is_specialized = false; 24*0b57cec5SDimitry Andric static constexpr T min() noexcept; 25*0b57cec5SDimitry Andric static constexpr T max() noexcept; 26*0b57cec5SDimitry Andric static constexpr T lowest() noexcept; 27*0b57cec5SDimitry Andric 28*0b57cec5SDimitry Andric static constexpr int digits = 0; 29*0b57cec5SDimitry Andric static constexpr int digits10 = 0; 30*0b57cec5SDimitry Andric static constexpr int max_digits10 = 0; 31*0b57cec5SDimitry Andric static constexpr bool is_signed = false; 32*0b57cec5SDimitry Andric static constexpr bool is_integer = false; 33*0b57cec5SDimitry Andric static constexpr bool is_exact = false; 34*0b57cec5SDimitry Andric static constexpr int radix = 0; 35*0b57cec5SDimitry Andric static constexpr T epsilon() noexcept; 36*0b57cec5SDimitry Andric static constexpr T round_error() noexcept; 37*0b57cec5SDimitry Andric 38*0b57cec5SDimitry Andric static constexpr int min_exponent = 0; 39*0b57cec5SDimitry Andric static constexpr int min_exponent10 = 0; 40*0b57cec5SDimitry Andric static constexpr int max_exponent = 0; 41*0b57cec5SDimitry Andric static constexpr int max_exponent10 = 0; 42*0b57cec5SDimitry Andric 43*0b57cec5SDimitry Andric static constexpr bool has_infinity = false; 44*0b57cec5SDimitry Andric static constexpr bool has_quiet_NaN = false; 45*0b57cec5SDimitry Andric static constexpr bool has_signaling_NaN = false; 46*0b57cec5SDimitry Andric static constexpr float_denorm_style has_denorm = denorm_absent; 47*0b57cec5SDimitry Andric static constexpr bool has_denorm_loss = false; 48*0b57cec5SDimitry Andric static constexpr T infinity() noexcept; 49*0b57cec5SDimitry Andric static constexpr T quiet_NaN() noexcept; 50*0b57cec5SDimitry Andric static constexpr T signaling_NaN() noexcept; 51*0b57cec5SDimitry Andric static constexpr T denorm_min() noexcept; 52*0b57cec5SDimitry Andric 53*0b57cec5SDimitry Andric static constexpr bool is_iec559 = false; 54*0b57cec5SDimitry Andric static constexpr bool is_bounded = false; 55*0b57cec5SDimitry Andric static constexpr bool is_modulo = false; 56*0b57cec5SDimitry Andric 57*0b57cec5SDimitry Andric static constexpr bool traps = false; 58*0b57cec5SDimitry Andric static constexpr bool tinyness_before = false; 59*0b57cec5SDimitry Andric static constexpr float_round_style round_style = round_toward_zero; 60*0b57cec5SDimitry Andric}; 61*0b57cec5SDimitry Andric 62*0b57cec5SDimitry Andricenum float_round_style 63*0b57cec5SDimitry Andric{ 64*0b57cec5SDimitry Andric round_indeterminate = -1, 65*0b57cec5SDimitry Andric round_toward_zero = 0, 66*0b57cec5SDimitry Andric round_to_nearest = 1, 67*0b57cec5SDimitry Andric round_toward_infinity = 2, 68*0b57cec5SDimitry Andric round_toward_neg_infinity = 3 69*0b57cec5SDimitry Andric}; 70*0b57cec5SDimitry Andric 71*0b57cec5SDimitry Andricenum float_denorm_style 72*0b57cec5SDimitry Andric{ 73*0b57cec5SDimitry Andric denorm_indeterminate = -1, 74*0b57cec5SDimitry Andric denorm_absent = 0, 75*0b57cec5SDimitry Andric denorm_present = 1 76*0b57cec5SDimitry Andric}; 77*0b57cec5SDimitry Andric 78*0b57cec5SDimitry Andrictemplate<> class numeric_limits<cv bool>; 79*0b57cec5SDimitry Andric 80*0b57cec5SDimitry Andrictemplate<> class numeric_limits<cv char>; 81*0b57cec5SDimitry Andrictemplate<> class numeric_limits<cv signed char>; 82*0b57cec5SDimitry Andrictemplate<> class numeric_limits<cv unsigned char>; 83*0b57cec5SDimitry Andrictemplate<> class numeric_limits<cv wchar_t>; 84*0b57cec5SDimitry Andrictemplate<> class numeric_limits<cv char8_t>; // C++20 85*0b57cec5SDimitry Andrictemplate<> class numeric_limits<cv char16_t>; 86*0b57cec5SDimitry Andrictemplate<> class numeric_limits<cv char32_t>; 87*0b57cec5SDimitry Andric 88*0b57cec5SDimitry Andrictemplate<> class numeric_limits<cv short>; 89*0b57cec5SDimitry Andrictemplate<> class numeric_limits<cv int>; 90*0b57cec5SDimitry Andrictemplate<> class numeric_limits<cv long>; 91*0b57cec5SDimitry Andrictemplate<> class numeric_limits<cv long long>; 92*0b57cec5SDimitry Andrictemplate<> class numeric_limits<cv unsigned short>; 93*0b57cec5SDimitry Andrictemplate<> class numeric_limits<cv unsigned int>; 94*0b57cec5SDimitry Andrictemplate<> class numeric_limits<cv unsigned long>; 95*0b57cec5SDimitry Andrictemplate<> class numeric_limits<cv unsigned long long>; 96*0b57cec5SDimitry Andric 97*0b57cec5SDimitry Andrictemplate<> class numeric_limits<cv float>; 98*0b57cec5SDimitry Andrictemplate<> class numeric_limits<cv double>; 99*0b57cec5SDimitry Andrictemplate<> class numeric_limits<cv long double>; 100*0b57cec5SDimitry Andric 101*0b57cec5SDimitry Andric} // std 102*0b57cec5SDimitry Andric 103*0b57cec5SDimitry Andric*/ 104*0b57cec5SDimitry Andric#include <__config> 105*0b57cec5SDimitry Andric#include <type_traits> 106*0b57cec5SDimitry Andric 107*0b57cec5SDimitry Andric#if defined(_LIBCPP_COMPILER_MSVC) 108*0b57cec5SDimitry Andric#include "support/win32/limits_msvc_win32.h" 109*0b57cec5SDimitry Andric#endif // _LIBCPP_MSVCRT 110*0b57cec5SDimitry Andric 111*0b57cec5SDimitry Andric#if defined(__IBMCPP__) 112*0b57cec5SDimitry Andric#include "support/ibm/limits.h" 113*0b57cec5SDimitry Andric#endif // __IBMCPP__ 114*0b57cec5SDimitry Andric 115*0b57cec5SDimitry Andric#if !defined(_LIBCPP_HAS_NO_PRAGMA_SYSTEM_HEADER) 116*0b57cec5SDimitry Andric#pragma GCC system_header 117*0b57cec5SDimitry Andric#endif 118*0b57cec5SDimitry Andric 119*0b57cec5SDimitry Andric_LIBCPP_PUSH_MACROS 120*0b57cec5SDimitry Andric#include <__undef_macros> 121*0b57cec5SDimitry Andric#include <version> 122*0b57cec5SDimitry Andric 123*0b57cec5SDimitry Andric 124*0b57cec5SDimitry Andric_LIBCPP_BEGIN_NAMESPACE_STD 125*0b57cec5SDimitry Andric 126*0b57cec5SDimitry Andricenum float_round_style 127*0b57cec5SDimitry Andric{ 128*0b57cec5SDimitry Andric round_indeterminate = -1, 129*0b57cec5SDimitry Andric round_toward_zero = 0, 130*0b57cec5SDimitry Andric round_to_nearest = 1, 131*0b57cec5SDimitry Andric round_toward_infinity = 2, 132*0b57cec5SDimitry Andric round_toward_neg_infinity = 3 133*0b57cec5SDimitry Andric}; 134*0b57cec5SDimitry Andric 135*0b57cec5SDimitry Andricenum float_denorm_style 136*0b57cec5SDimitry Andric{ 137*0b57cec5SDimitry Andric denorm_indeterminate = -1, 138*0b57cec5SDimitry Andric denorm_absent = 0, 139*0b57cec5SDimitry Andric denorm_present = 1 140*0b57cec5SDimitry Andric}; 141*0b57cec5SDimitry Andric 142*0b57cec5SDimitry Andrictemplate <class _Tp, bool = is_arithmetic<_Tp>::value> 143*0b57cec5SDimitry Andricclass __libcpp_numeric_limits 144*0b57cec5SDimitry Andric{ 145*0b57cec5SDimitry Andricprotected: 146*0b57cec5SDimitry Andric typedef _Tp type; 147*0b57cec5SDimitry Andric 148*0b57cec5SDimitry Andric static _LIBCPP_CONSTEXPR const bool is_specialized = false; 149*0b57cec5SDimitry Andric _LIBCPP_INLINE_VISIBILITY static _LIBCPP_CONSTEXPR type min() _NOEXCEPT {return type();} 150*0b57cec5SDimitry Andric _LIBCPP_INLINE_VISIBILITY static _LIBCPP_CONSTEXPR type max() _NOEXCEPT {return type();} 151*0b57cec5SDimitry Andric _LIBCPP_INLINE_VISIBILITY static _LIBCPP_CONSTEXPR type lowest() _NOEXCEPT {return type();} 152*0b57cec5SDimitry Andric 153*0b57cec5SDimitry Andric static _LIBCPP_CONSTEXPR const int digits = 0; 154*0b57cec5SDimitry Andric static _LIBCPP_CONSTEXPR const int digits10 = 0; 155*0b57cec5SDimitry Andric static _LIBCPP_CONSTEXPR const int max_digits10 = 0; 156*0b57cec5SDimitry Andric static _LIBCPP_CONSTEXPR const bool is_signed = false; 157*0b57cec5SDimitry Andric static _LIBCPP_CONSTEXPR const bool is_integer = false; 158*0b57cec5SDimitry Andric static _LIBCPP_CONSTEXPR const bool is_exact = false; 159*0b57cec5SDimitry Andric static _LIBCPP_CONSTEXPR const int radix = 0; 160*0b57cec5SDimitry Andric _LIBCPP_INLINE_VISIBILITY static _LIBCPP_CONSTEXPR type epsilon() _NOEXCEPT {return type();} 161*0b57cec5SDimitry Andric _LIBCPP_INLINE_VISIBILITY static _LIBCPP_CONSTEXPR type round_error() _NOEXCEPT {return type();} 162*0b57cec5SDimitry Andric 163*0b57cec5SDimitry Andric static _LIBCPP_CONSTEXPR const int min_exponent = 0; 164*0b57cec5SDimitry Andric static _LIBCPP_CONSTEXPR const int min_exponent10 = 0; 165*0b57cec5SDimitry Andric static _LIBCPP_CONSTEXPR const int max_exponent = 0; 166*0b57cec5SDimitry Andric static _LIBCPP_CONSTEXPR const int max_exponent10 = 0; 167*0b57cec5SDimitry Andric 168*0b57cec5SDimitry Andric static _LIBCPP_CONSTEXPR const bool has_infinity = false; 169*0b57cec5SDimitry Andric static _LIBCPP_CONSTEXPR const bool has_quiet_NaN = false; 170*0b57cec5SDimitry Andric static _LIBCPP_CONSTEXPR const bool has_signaling_NaN = false; 171*0b57cec5SDimitry Andric static _LIBCPP_CONSTEXPR const float_denorm_style has_denorm = denorm_absent; 172*0b57cec5SDimitry Andric static _LIBCPP_CONSTEXPR const bool has_denorm_loss = false; 173*0b57cec5SDimitry Andric _LIBCPP_INLINE_VISIBILITY static _LIBCPP_CONSTEXPR type infinity() _NOEXCEPT {return type();} 174*0b57cec5SDimitry Andric _LIBCPP_INLINE_VISIBILITY static _LIBCPP_CONSTEXPR type quiet_NaN() _NOEXCEPT {return type();} 175*0b57cec5SDimitry Andric _LIBCPP_INLINE_VISIBILITY static _LIBCPP_CONSTEXPR type signaling_NaN() _NOEXCEPT {return type();} 176*0b57cec5SDimitry Andric _LIBCPP_INLINE_VISIBILITY static _LIBCPP_CONSTEXPR type denorm_min() _NOEXCEPT {return type();} 177*0b57cec5SDimitry Andric 178*0b57cec5SDimitry Andric static _LIBCPP_CONSTEXPR const bool is_iec559 = false; 179*0b57cec5SDimitry Andric static _LIBCPP_CONSTEXPR const bool is_bounded = false; 180*0b57cec5SDimitry Andric static _LIBCPP_CONSTEXPR const bool is_modulo = false; 181*0b57cec5SDimitry Andric 182*0b57cec5SDimitry Andric static _LIBCPP_CONSTEXPR const bool traps = false; 183*0b57cec5SDimitry Andric static _LIBCPP_CONSTEXPR const bool tinyness_before = false; 184*0b57cec5SDimitry Andric static _LIBCPP_CONSTEXPR const float_round_style round_style = round_toward_zero; 185*0b57cec5SDimitry Andric}; 186*0b57cec5SDimitry Andric 187*0b57cec5SDimitry Andrictemplate <class _Tp, int __digits, bool _IsSigned> 188*0b57cec5SDimitry Andricstruct __libcpp_compute_min 189*0b57cec5SDimitry Andric{ 190*0b57cec5SDimitry Andric static _LIBCPP_CONSTEXPR const _Tp value = _Tp(_Tp(1) << __digits); 191*0b57cec5SDimitry Andric}; 192*0b57cec5SDimitry Andric 193*0b57cec5SDimitry Andrictemplate <class _Tp, int __digits> 194*0b57cec5SDimitry Andricstruct __libcpp_compute_min<_Tp, __digits, false> 195*0b57cec5SDimitry Andric{ 196*0b57cec5SDimitry Andric static _LIBCPP_CONSTEXPR const _Tp value = _Tp(0); 197*0b57cec5SDimitry Andric}; 198*0b57cec5SDimitry Andric 199*0b57cec5SDimitry Andrictemplate <class _Tp> 200*0b57cec5SDimitry Andricclass __libcpp_numeric_limits<_Tp, true> 201*0b57cec5SDimitry Andric{ 202*0b57cec5SDimitry Andricprotected: 203*0b57cec5SDimitry Andric typedef _Tp type; 204*0b57cec5SDimitry Andric 205*0b57cec5SDimitry Andric static _LIBCPP_CONSTEXPR const bool is_specialized = true; 206*0b57cec5SDimitry Andric 207*0b57cec5SDimitry Andric static _LIBCPP_CONSTEXPR const bool is_signed = type(-1) < type(0); 208*0b57cec5SDimitry Andric static _LIBCPP_CONSTEXPR const int digits = static_cast<int>(sizeof(type) * __CHAR_BIT__ - is_signed); 209*0b57cec5SDimitry Andric static _LIBCPP_CONSTEXPR const int digits10 = digits * 3 / 10; 210*0b57cec5SDimitry Andric static _LIBCPP_CONSTEXPR const int max_digits10 = 0; 211*0b57cec5SDimitry Andric static _LIBCPP_CONSTEXPR const type __min = __libcpp_compute_min<type, digits, is_signed>::value; 212*0b57cec5SDimitry Andric static _LIBCPP_CONSTEXPR const type __max = is_signed ? type(type(~0) ^ __min) : type(~0); 213*0b57cec5SDimitry Andric _LIBCPP_INLINE_VISIBILITY static _LIBCPP_CONSTEXPR type min() _NOEXCEPT {return __min;} 214*0b57cec5SDimitry Andric _LIBCPP_INLINE_VISIBILITY static _LIBCPP_CONSTEXPR type max() _NOEXCEPT {return __max;} 215*0b57cec5SDimitry Andric _LIBCPP_INLINE_VISIBILITY static _LIBCPP_CONSTEXPR type lowest() _NOEXCEPT {return min();} 216*0b57cec5SDimitry Andric 217*0b57cec5SDimitry Andric static _LIBCPP_CONSTEXPR const bool is_integer = true; 218*0b57cec5SDimitry Andric static _LIBCPP_CONSTEXPR const bool is_exact = true; 219*0b57cec5SDimitry Andric static _LIBCPP_CONSTEXPR const int radix = 2; 220*0b57cec5SDimitry Andric _LIBCPP_INLINE_VISIBILITY static _LIBCPP_CONSTEXPR type epsilon() _NOEXCEPT {return type(0);} 221*0b57cec5SDimitry Andric _LIBCPP_INLINE_VISIBILITY static _LIBCPP_CONSTEXPR type round_error() _NOEXCEPT {return type(0);} 222*0b57cec5SDimitry Andric 223*0b57cec5SDimitry Andric static _LIBCPP_CONSTEXPR const int min_exponent = 0; 224*0b57cec5SDimitry Andric static _LIBCPP_CONSTEXPR const int min_exponent10 = 0; 225*0b57cec5SDimitry Andric static _LIBCPP_CONSTEXPR const int max_exponent = 0; 226*0b57cec5SDimitry Andric static _LIBCPP_CONSTEXPR const int max_exponent10 = 0; 227*0b57cec5SDimitry Andric 228*0b57cec5SDimitry Andric static _LIBCPP_CONSTEXPR const bool has_infinity = false; 229*0b57cec5SDimitry Andric static _LIBCPP_CONSTEXPR const bool has_quiet_NaN = false; 230*0b57cec5SDimitry Andric static _LIBCPP_CONSTEXPR const bool has_signaling_NaN = false; 231*0b57cec5SDimitry Andric static _LIBCPP_CONSTEXPR const float_denorm_style has_denorm = denorm_absent; 232*0b57cec5SDimitry Andric static _LIBCPP_CONSTEXPR const bool has_denorm_loss = false; 233*0b57cec5SDimitry Andric _LIBCPP_INLINE_VISIBILITY static _LIBCPP_CONSTEXPR type infinity() _NOEXCEPT {return type(0);} 234*0b57cec5SDimitry Andric _LIBCPP_INLINE_VISIBILITY static _LIBCPP_CONSTEXPR type quiet_NaN() _NOEXCEPT {return type(0);} 235*0b57cec5SDimitry Andric _LIBCPP_INLINE_VISIBILITY static _LIBCPP_CONSTEXPR type signaling_NaN() _NOEXCEPT {return type(0);} 236*0b57cec5SDimitry Andric _LIBCPP_INLINE_VISIBILITY static _LIBCPP_CONSTEXPR type denorm_min() _NOEXCEPT {return type(0);} 237*0b57cec5SDimitry Andric 238*0b57cec5SDimitry Andric static _LIBCPP_CONSTEXPR const bool is_iec559 = false; 239*0b57cec5SDimitry Andric static _LIBCPP_CONSTEXPR const bool is_bounded = true; 240*0b57cec5SDimitry Andric static _LIBCPP_CONSTEXPR const bool is_modulo = !_VSTD::is_signed<_Tp>::value; 241*0b57cec5SDimitry Andric 242*0b57cec5SDimitry Andric#if defined(__i386__) || defined(__x86_64__) || defined(__pnacl__) || \ 243*0b57cec5SDimitry Andric defined(__wasm__) 244*0b57cec5SDimitry Andric static _LIBCPP_CONSTEXPR const bool traps = true; 245*0b57cec5SDimitry Andric#else 246*0b57cec5SDimitry Andric static _LIBCPP_CONSTEXPR const bool traps = false; 247*0b57cec5SDimitry Andric#endif 248*0b57cec5SDimitry Andric static _LIBCPP_CONSTEXPR const bool tinyness_before = false; 249*0b57cec5SDimitry Andric static _LIBCPP_CONSTEXPR const float_round_style round_style = round_toward_zero; 250*0b57cec5SDimitry Andric}; 251*0b57cec5SDimitry Andric 252*0b57cec5SDimitry Andrictemplate <> 253*0b57cec5SDimitry Andricclass __libcpp_numeric_limits<bool, true> 254*0b57cec5SDimitry Andric{ 255*0b57cec5SDimitry Andricprotected: 256*0b57cec5SDimitry Andric typedef bool type; 257*0b57cec5SDimitry Andric 258*0b57cec5SDimitry Andric static _LIBCPP_CONSTEXPR const bool is_specialized = true; 259*0b57cec5SDimitry Andric 260*0b57cec5SDimitry Andric static _LIBCPP_CONSTEXPR const bool is_signed = false; 261*0b57cec5SDimitry Andric static _LIBCPP_CONSTEXPR const int digits = 1; 262*0b57cec5SDimitry Andric static _LIBCPP_CONSTEXPR const int digits10 = 0; 263*0b57cec5SDimitry Andric static _LIBCPP_CONSTEXPR const int max_digits10 = 0; 264*0b57cec5SDimitry Andric static _LIBCPP_CONSTEXPR const type __min = false; 265*0b57cec5SDimitry Andric static _LIBCPP_CONSTEXPR const type __max = true; 266*0b57cec5SDimitry Andric _LIBCPP_INLINE_VISIBILITY static _LIBCPP_CONSTEXPR type min() _NOEXCEPT {return __min;} 267*0b57cec5SDimitry Andric _LIBCPP_INLINE_VISIBILITY static _LIBCPP_CONSTEXPR type max() _NOEXCEPT {return __max;} 268*0b57cec5SDimitry Andric _LIBCPP_INLINE_VISIBILITY static _LIBCPP_CONSTEXPR type lowest() _NOEXCEPT {return min();} 269*0b57cec5SDimitry Andric 270*0b57cec5SDimitry Andric static _LIBCPP_CONSTEXPR const bool is_integer = true; 271*0b57cec5SDimitry Andric static _LIBCPP_CONSTEXPR const bool is_exact = true; 272*0b57cec5SDimitry Andric static _LIBCPP_CONSTEXPR const int radix = 2; 273*0b57cec5SDimitry Andric _LIBCPP_INLINE_VISIBILITY static _LIBCPP_CONSTEXPR type epsilon() _NOEXCEPT {return type(0);} 274*0b57cec5SDimitry Andric _LIBCPP_INLINE_VISIBILITY static _LIBCPP_CONSTEXPR type round_error() _NOEXCEPT {return type(0);} 275*0b57cec5SDimitry Andric 276*0b57cec5SDimitry Andric static _LIBCPP_CONSTEXPR const int min_exponent = 0; 277*0b57cec5SDimitry Andric static _LIBCPP_CONSTEXPR const int min_exponent10 = 0; 278*0b57cec5SDimitry Andric static _LIBCPP_CONSTEXPR const int max_exponent = 0; 279*0b57cec5SDimitry Andric static _LIBCPP_CONSTEXPR const int max_exponent10 = 0; 280*0b57cec5SDimitry Andric 281*0b57cec5SDimitry Andric static _LIBCPP_CONSTEXPR const bool has_infinity = false; 282*0b57cec5SDimitry Andric static _LIBCPP_CONSTEXPR const bool has_quiet_NaN = false; 283*0b57cec5SDimitry Andric static _LIBCPP_CONSTEXPR const bool has_signaling_NaN = false; 284*0b57cec5SDimitry Andric static _LIBCPP_CONSTEXPR const float_denorm_style has_denorm = denorm_absent; 285*0b57cec5SDimitry Andric static _LIBCPP_CONSTEXPR const bool has_denorm_loss = false; 286*0b57cec5SDimitry Andric _LIBCPP_INLINE_VISIBILITY static _LIBCPP_CONSTEXPR type infinity() _NOEXCEPT {return type(0);} 287*0b57cec5SDimitry Andric _LIBCPP_INLINE_VISIBILITY static _LIBCPP_CONSTEXPR type quiet_NaN() _NOEXCEPT {return type(0);} 288*0b57cec5SDimitry Andric _LIBCPP_INLINE_VISIBILITY static _LIBCPP_CONSTEXPR type signaling_NaN() _NOEXCEPT {return type(0);} 289*0b57cec5SDimitry Andric _LIBCPP_INLINE_VISIBILITY static _LIBCPP_CONSTEXPR type denorm_min() _NOEXCEPT {return type(0);} 290*0b57cec5SDimitry Andric 291*0b57cec5SDimitry Andric static _LIBCPP_CONSTEXPR const bool is_iec559 = false; 292*0b57cec5SDimitry Andric static _LIBCPP_CONSTEXPR const bool is_bounded = true; 293*0b57cec5SDimitry Andric static _LIBCPP_CONSTEXPR const bool is_modulo = false; 294*0b57cec5SDimitry Andric 295*0b57cec5SDimitry Andric static _LIBCPP_CONSTEXPR const bool traps = false; 296*0b57cec5SDimitry Andric static _LIBCPP_CONSTEXPR const bool tinyness_before = false; 297*0b57cec5SDimitry Andric static _LIBCPP_CONSTEXPR const float_round_style round_style = round_toward_zero; 298*0b57cec5SDimitry Andric}; 299*0b57cec5SDimitry Andric 300*0b57cec5SDimitry Andrictemplate <> 301*0b57cec5SDimitry Andricclass __libcpp_numeric_limits<float, true> 302*0b57cec5SDimitry Andric{ 303*0b57cec5SDimitry Andricprotected: 304*0b57cec5SDimitry Andric typedef float type; 305*0b57cec5SDimitry Andric 306*0b57cec5SDimitry Andric static _LIBCPP_CONSTEXPR const bool is_specialized = true; 307*0b57cec5SDimitry Andric 308*0b57cec5SDimitry Andric static _LIBCPP_CONSTEXPR const bool is_signed = true; 309*0b57cec5SDimitry Andric static _LIBCPP_CONSTEXPR const int digits = __FLT_MANT_DIG__; 310*0b57cec5SDimitry Andric static _LIBCPP_CONSTEXPR const int digits10 = __FLT_DIG__; 311*0b57cec5SDimitry Andric static _LIBCPP_CONSTEXPR const int max_digits10 = 2+(digits * 30103l)/100000l; 312*0b57cec5SDimitry Andric _LIBCPP_INLINE_VISIBILITY static _LIBCPP_CONSTEXPR type min() _NOEXCEPT {return __FLT_MIN__;} 313*0b57cec5SDimitry Andric _LIBCPP_INLINE_VISIBILITY static _LIBCPP_CONSTEXPR type max() _NOEXCEPT {return __FLT_MAX__;} 314*0b57cec5SDimitry Andric _LIBCPP_INLINE_VISIBILITY static _LIBCPP_CONSTEXPR type lowest() _NOEXCEPT {return -max();} 315*0b57cec5SDimitry Andric 316*0b57cec5SDimitry Andric static _LIBCPP_CONSTEXPR const bool is_integer = false; 317*0b57cec5SDimitry Andric static _LIBCPP_CONSTEXPR const bool is_exact = false; 318*0b57cec5SDimitry Andric static _LIBCPP_CONSTEXPR const int radix = __FLT_RADIX__; 319*0b57cec5SDimitry Andric _LIBCPP_INLINE_VISIBILITY static _LIBCPP_CONSTEXPR type epsilon() _NOEXCEPT {return __FLT_EPSILON__;} 320*0b57cec5SDimitry Andric _LIBCPP_INLINE_VISIBILITY static _LIBCPP_CONSTEXPR type round_error() _NOEXCEPT {return 0.5F;} 321*0b57cec5SDimitry Andric 322*0b57cec5SDimitry Andric static _LIBCPP_CONSTEXPR const int min_exponent = __FLT_MIN_EXP__; 323*0b57cec5SDimitry Andric static _LIBCPP_CONSTEXPR const int min_exponent10 = __FLT_MIN_10_EXP__; 324*0b57cec5SDimitry Andric static _LIBCPP_CONSTEXPR const int max_exponent = __FLT_MAX_EXP__; 325*0b57cec5SDimitry Andric static _LIBCPP_CONSTEXPR const int max_exponent10 = __FLT_MAX_10_EXP__; 326*0b57cec5SDimitry Andric 327*0b57cec5SDimitry Andric static _LIBCPP_CONSTEXPR const bool has_infinity = true; 328*0b57cec5SDimitry Andric static _LIBCPP_CONSTEXPR const bool has_quiet_NaN = true; 329*0b57cec5SDimitry Andric static _LIBCPP_CONSTEXPR const bool has_signaling_NaN = true; 330*0b57cec5SDimitry Andric static _LIBCPP_CONSTEXPR const float_denorm_style has_denorm = denorm_present; 331*0b57cec5SDimitry Andric static _LIBCPP_CONSTEXPR const bool has_denorm_loss = false; 332*0b57cec5SDimitry Andric _LIBCPP_INLINE_VISIBILITY static _LIBCPP_CONSTEXPR type infinity() _NOEXCEPT {return __builtin_huge_valf();} 333*0b57cec5SDimitry Andric _LIBCPP_INLINE_VISIBILITY static _LIBCPP_CONSTEXPR type quiet_NaN() _NOEXCEPT {return __builtin_nanf("");} 334*0b57cec5SDimitry Andric _LIBCPP_INLINE_VISIBILITY static _LIBCPP_CONSTEXPR type signaling_NaN() _NOEXCEPT {return __builtin_nansf("");} 335*0b57cec5SDimitry Andric _LIBCPP_INLINE_VISIBILITY static _LIBCPP_CONSTEXPR type denorm_min() _NOEXCEPT {return __FLT_DENORM_MIN__;} 336*0b57cec5SDimitry Andric 337*0b57cec5SDimitry Andric static _LIBCPP_CONSTEXPR const bool is_iec559 = true; 338*0b57cec5SDimitry Andric static _LIBCPP_CONSTEXPR const bool is_bounded = true; 339*0b57cec5SDimitry Andric static _LIBCPP_CONSTEXPR const bool is_modulo = false; 340*0b57cec5SDimitry Andric 341*0b57cec5SDimitry Andric static _LIBCPP_CONSTEXPR const bool traps = false; 342*0b57cec5SDimitry Andric static _LIBCPP_CONSTEXPR const bool tinyness_before = false; 343*0b57cec5SDimitry Andric static _LIBCPP_CONSTEXPR const float_round_style round_style = round_to_nearest; 344*0b57cec5SDimitry Andric}; 345*0b57cec5SDimitry Andric 346*0b57cec5SDimitry Andrictemplate <> 347*0b57cec5SDimitry Andricclass __libcpp_numeric_limits<double, true> 348*0b57cec5SDimitry Andric{ 349*0b57cec5SDimitry Andricprotected: 350*0b57cec5SDimitry Andric typedef double type; 351*0b57cec5SDimitry Andric 352*0b57cec5SDimitry Andric static _LIBCPP_CONSTEXPR const bool is_specialized = true; 353*0b57cec5SDimitry Andric 354*0b57cec5SDimitry Andric static _LIBCPP_CONSTEXPR const bool is_signed = true; 355*0b57cec5SDimitry Andric static _LIBCPP_CONSTEXPR const int digits = __DBL_MANT_DIG__; 356*0b57cec5SDimitry Andric static _LIBCPP_CONSTEXPR const int digits10 = __DBL_DIG__; 357*0b57cec5SDimitry Andric static _LIBCPP_CONSTEXPR const int max_digits10 = 2+(digits * 30103l)/100000l; 358*0b57cec5SDimitry Andric _LIBCPP_INLINE_VISIBILITY static _LIBCPP_CONSTEXPR type min() _NOEXCEPT {return __DBL_MIN__;} 359*0b57cec5SDimitry Andric _LIBCPP_INLINE_VISIBILITY static _LIBCPP_CONSTEXPR type max() _NOEXCEPT {return __DBL_MAX__;} 360*0b57cec5SDimitry Andric _LIBCPP_INLINE_VISIBILITY static _LIBCPP_CONSTEXPR type lowest() _NOEXCEPT {return -max();} 361*0b57cec5SDimitry Andric 362*0b57cec5SDimitry Andric static _LIBCPP_CONSTEXPR const bool is_integer = false; 363*0b57cec5SDimitry Andric static _LIBCPP_CONSTEXPR const bool is_exact = false; 364*0b57cec5SDimitry Andric static _LIBCPP_CONSTEXPR const int radix = __FLT_RADIX__; 365*0b57cec5SDimitry Andric _LIBCPP_INLINE_VISIBILITY static _LIBCPP_CONSTEXPR type epsilon() _NOEXCEPT {return __DBL_EPSILON__;} 366*0b57cec5SDimitry Andric _LIBCPP_INLINE_VISIBILITY static _LIBCPP_CONSTEXPR type round_error() _NOEXCEPT {return 0.5;} 367*0b57cec5SDimitry Andric 368*0b57cec5SDimitry Andric static _LIBCPP_CONSTEXPR const int min_exponent = __DBL_MIN_EXP__; 369*0b57cec5SDimitry Andric static _LIBCPP_CONSTEXPR const int min_exponent10 = __DBL_MIN_10_EXP__; 370*0b57cec5SDimitry Andric static _LIBCPP_CONSTEXPR const int max_exponent = __DBL_MAX_EXP__; 371*0b57cec5SDimitry Andric static _LIBCPP_CONSTEXPR const int max_exponent10 = __DBL_MAX_10_EXP__; 372*0b57cec5SDimitry Andric 373*0b57cec5SDimitry Andric static _LIBCPP_CONSTEXPR const bool has_infinity = true; 374*0b57cec5SDimitry Andric static _LIBCPP_CONSTEXPR const bool has_quiet_NaN = true; 375*0b57cec5SDimitry Andric static _LIBCPP_CONSTEXPR const bool has_signaling_NaN = true; 376*0b57cec5SDimitry Andric static _LIBCPP_CONSTEXPR const float_denorm_style has_denorm = denorm_present; 377*0b57cec5SDimitry Andric static _LIBCPP_CONSTEXPR const bool has_denorm_loss = false; 378*0b57cec5SDimitry Andric _LIBCPP_INLINE_VISIBILITY static _LIBCPP_CONSTEXPR type infinity() _NOEXCEPT {return __builtin_huge_val();} 379*0b57cec5SDimitry Andric _LIBCPP_INLINE_VISIBILITY static _LIBCPP_CONSTEXPR type quiet_NaN() _NOEXCEPT {return __builtin_nan("");} 380*0b57cec5SDimitry Andric _LIBCPP_INLINE_VISIBILITY static _LIBCPP_CONSTEXPR type signaling_NaN() _NOEXCEPT {return __builtin_nans("");} 381*0b57cec5SDimitry Andric _LIBCPP_INLINE_VISIBILITY static _LIBCPP_CONSTEXPR type denorm_min() _NOEXCEPT {return __DBL_DENORM_MIN__;} 382*0b57cec5SDimitry Andric 383*0b57cec5SDimitry Andric static _LIBCPP_CONSTEXPR const bool is_iec559 = true; 384*0b57cec5SDimitry Andric static _LIBCPP_CONSTEXPR const bool is_bounded = true; 385*0b57cec5SDimitry Andric static _LIBCPP_CONSTEXPR const bool is_modulo = false; 386*0b57cec5SDimitry Andric 387*0b57cec5SDimitry Andric static _LIBCPP_CONSTEXPR const bool traps = false; 388*0b57cec5SDimitry Andric static _LIBCPP_CONSTEXPR const bool tinyness_before = false; 389*0b57cec5SDimitry Andric static _LIBCPP_CONSTEXPR const float_round_style round_style = round_to_nearest; 390*0b57cec5SDimitry Andric}; 391*0b57cec5SDimitry Andric 392*0b57cec5SDimitry Andrictemplate <> 393*0b57cec5SDimitry Andricclass __libcpp_numeric_limits<long double, true> 394*0b57cec5SDimitry Andric{ 395*0b57cec5SDimitry Andricprotected: 396*0b57cec5SDimitry Andric typedef long double type; 397*0b57cec5SDimitry Andric 398*0b57cec5SDimitry Andric static _LIBCPP_CONSTEXPR const bool is_specialized = true; 399*0b57cec5SDimitry Andric 400*0b57cec5SDimitry Andric static _LIBCPP_CONSTEXPR const bool is_signed = true; 401*0b57cec5SDimitry Andric static _LIBCPP_CONSTEXPR const int digits = __LDBL_MANT_DIG__; 402*0b57cec5SDimitry Andric static _LIBCPP_CONSTEXPR const int digits10 = __LDBL_DIG__; 403*0b57cec5SDimitry Andric static _LIBCPP_CONSTEXPR const int max_digits10 = 2+(digits * 30103l)/100000l; 404*0b57cec5SDimitry Andric _LIBCPP_INLINE_VISIBILITY static _LIBCPP_CONSTEXPR type min() _NOEXCEPT {return __LDBL_MIN__;} 405*0b57cec5SDimitry Andric _LIBCPP_INLINE_VISIBILITY static _LIBCPP_CONSTEXPR type max() _NOEXCEPT {return __LDBL_MAX__;} 406*0b57cec5SDimitry Andric _LIBCPP_INLINE_VISIBILITY static _LIBCPP_CONSTEXPR type lowest() _NOEXCEPT {return -max();} 407*0b57cec5SDimitry Andric 408*0b57cec5SDimitry Andric static _LIBCPP_CONSTEXPR const bool is_integer = false; 409*0b57cec5SDimitry Andric static _LIBCPP_CONSTEXPR const bool is_exact = false; 410*0b57cec5SDimitry Andric static _LIBCPP_CONSTEXPR const int radix = __FLT_RADIX__; 411*0b57cec5SDimitry Andric _LIBCPP_INLINE_VISIBILITY static _LIBCPP_CONSTEXPR type epsilon() _NOEXCEPT {return __LDBL_EPSILON__;} 412*0b57cec5SDimitry Andric _LIBCPP_INLINE_VISIBILITY static _LIBCPP_CONSTEXPR type round_error() _NOEXCEPT {return 0.5L;} 413*0b57cec5SDimitry Andric 414*0b57cec5SDimitry Andric static _LIBCPP_CONSTEXPR const int min_exponent = __LDBL_MIN_EXP__; 415*0b57cec5SDimitry Andric static _LIBCPP_CONSTEXPR const int min_exponent10 = __LDBL_MIN_10_EXP__; 416*0b57cec5SDimitry Andric static _LIBCPP_CONSTEXPR const int max_exponent = __LDBL_MAX_EXP__; 417*0b57cec5SDimitry Andric static _LIBCPP_CONSTEXPR const int max_exponent10 = __LDBL_MAX_10_EXP__; 418*0b57cec5SDimitry Andric 419*0b57cec5SDimitry Andric static _LIBCPP_CONSTEXPR const bool has_infinity = true; 420*0b57cec5SDimitry Andric static _LIBCPP_CONSTEXPR const bool has_quiet_NaN = true; 421*0b57cec5SDimitry Andric static _LIBCPP_CONSTEXPR const bool has_signaling_NaN = true; 422*0b57cec5SDimitry Andric static _LIBCPP_CONSTEXPR const float_denorm_style has_denorm = denorm_present; 423*0b57cec5SDimitry Andric static _LIBCPP_CONSTEXPR const bool has_denorm_loss = false; 424*0b57cec5SDimitry Andric _LIBCPP_INLINE_VISIBILITY static _LIBCPP_CONSTEXPR type infinity() _NOEXCEPT {return __builtin_huge_vall();} 425*0b57cec5SDimitry Andric _LIBCPP_INLINE_VISIBILITY static _LIBCPP_CONSTEXPR type quiet_NaN() _NOEXCEPT {return __builtin_nanl("");} 426*0b57cec5SDimitry Andric _LIBCPP_INLINE_VISIBILITY static _LIBCPP_CONSTEXPR type signaling_NaN() _NOEXCEPT {return __builtin_nansl("");} 427*0b57cec5SDimitry Andric _LIBCPP_INLINE_VISIBILITY static _LIBCPP_CONSTEXPR type denorm_min() _NOEXCEPT {return __LDBL_DENORM_MIN__;} 428*0b57cec5SDimitry Andric 429*0b57cec5SDimitry Andric#if (defined(__ppc__) || defined(__ppc64__)) 430*0b57cec5SDimitry Andric static _LIBCPP_CONSTEXPR const bool is_iec559 = false; 431*0b57cec5SDimitry Andric#else 432*0b57cec5SDimitry Andric static _LIBCPP_CONSTEXPR const bool is_iec559 = true; 433*0b57cec5SDimitry Andric#endif 434*0b57cec5SDimitry Andric static _LIBCPP_CONSTEXPR const bool is_bounded = true; 435*0b57cec5SDimitry Andric static _LIBCPP_CONSTEXPR const bool is_modulo = false; 436*0b57cec5SDimitry Andric 437*0b57cec5SDimitry Andric static _LIBCPP_CONSTEXPR const bool traps = false; 438*0b57cec5SDimitry Andric static _LIBCPP_CONSTEXPR const bool tinyness_before = false; 439*0b57cec5SDimitry Andric static _LIBCPP_CONSTEXPR const float_round_style round_style = round_to_nearest; 440*0b57cec5SDimitry Andric}; 441*0b57cec5SDimitry Andric 442*0b57cec5SDimitry Andrictemplate <class _Tp> 443*0b57cec5SDimitry Andricclass _LIBCPP_TEMPLATE_VIS numeric_limits 444*0b57cec5SDimitry Andric : private __libcpp_numeric_limits<typename remove_cv<_Tp>::type> 445*0b57cec5SDimitry Andric{ 446*0b57cec5SDimitry Andric typedef __libcpp_numeric_limits<typename remove_cv<_Tp>::type> __base; 447*0b57cec5SDimitry Andric typedef typename __base::type type; 448*0b57cec5SDimitry Andricpublic: 449*0b57cec5SDimitry Andric static _LIBCPP_CONSTEXPR const bool is_specialized = __base::is_specialized; 450*0b57cec5SDimitry Andric _LIBCPP_INLINE_VISIBILITY static _LIBCPP_CONSTEXPR type min() _NOEXCEPT {return __base::min();} 451*0b57cec5SDimitry Andric _LIBCPP_INLINE_VISIBILITY static _LIBCPP_CONSTEXPR type max() _NOEXCEPT {return __base::max();} 452*0b57cec5SDimitry Andric _LIBCPP_INLINE_VISIBILITY static _LIBCPP_CONSTEXPR type lowest() _NOEXCEPT {return __base::lowest();} 453*0b57cec5SDimitry Andric 454*0b57cec5SDimitry Andric static _LIBCPP_CONSTEXPR const int digits = __base::digits; 455*0b57cec5SDimitry Andric static _LIBCPP_CONSTEXPR const int digits10 = __base::digits10; 456*0b57cec5SDimitry Andric static _LIBCPP_CONSTEXPR const int max_digits10 = __base::max_digits10; 457*0b57cec5SDimitry Andric static _LIBCPP_CONSTEXPR const bool is_signed = __base::is_signed; 458*0b57cec5SDimitry Andric static _LIBCPP_CONSTEXPR const bool is_integer = __base::is_integer; 459*0b57cec5SDimitry Andric static _LIBCPP_CONSTEXPR const bool is_exact = __base::is_exact; 460*0b57cec5SDimitry Andric static _LIBCPP_CONSTEXPR const int radix = __base::radix; 461*0b57cec5SDimitry Andric _LIBCPP_INLINE_VISIBILITY static _LIBCPP_CONSTEXPR type epsilon() _NOEXCEPT {return __base::epsilon();} 462*0b57cec5SDimitry Andric _LIBCPP_INLINE_VISIBILITY static _LIBCPP_CONSTEXPR type round_error() _NOEXCEPT {return __base::round_error();} 463*0b57cec5SDimitry Andric 464*0b57cec5SDimitry Andric static _LIBCPP_CONSTEXPR const int min_exponent = __base::min_exponent; 465*0b57cec5SDimitry Andric static _LIBCPP_CONSTEXPR const int min_exponent10 = __base::min_exponent10; 466*0b57cec5SDimitry Andric static _LIBCPP_CONSTEXPR const int max_exponent = __base::max_exponent; 467*0b57cec5SDimitry Andric static _LIBCPP_CONSTEXPR const int max_exponent10 = __base::max_exponent10; 468*0b57cec5SDimitry Andric 469*0b57cec5SDimitry Andric static _LIBCPP_CONSTEXPR const bool has_infinity = __base::has_infinity; 470*0b57cec5SDimitry Andric static _LIBCPP_CONSTEXPR const bool has_quiet_NaN = __base::has_quiet_NaN; 471*0b57cec5SDimitry Andric static _LIBCPP_CONSTEXPR const bool has_signaling_NaN = __base::has_signaling_NaN; 472*0b57cec5SDimitry Andric static _LIBCPP_CONSTEXPR const float_denorm_style has_denorm = __base::has_denorm; 473*0b57cec5SDimitry Andric static _LIBCPP_CONSTEXPR const bool has_denorm_loss = __base::has_denorm_loss; 474*0b57cec5SDimitry Andric _LIBCPP_INLINE_VISIBILITY static _LIBCPP_CONSTEXPR type infinity() _NOEXCEPT {return __base::infinity();} 475*0b57cec5SDimitry Andric _LIBCPP_INLINE_VISIBILITY static _LIBCPP_CONSTEXPR type quiet_NaN() _NOEXCEPT {return __base::quiet_NaN();} 476*0b57cec5SDimitry Andric _LIBCPP_INLINE_VISIBILITY static _LIBCPP_CONSTEXPR type signaling_NaN() _NOEXCEPT {return __base::signaling_NaN();} 477*0b57cec5SDimitry Andric _LIBCPP_INLINE_VISIBILITY static _LIBCPP_CONSTEXPR type denorm_min() _NOEXCEPT {return __base::denorm_min();} 478*0b57cec5SDimitry Andric 479*0b57cec5SDimitry Andric static _LIBCPP_CONSTEXPR const bool is_iec559 = __base::is_iec559; 480*0b57cec5SDimitry Andric static _LIBCPP_CONSTEXPR const bool is_bounded = __base::is_bounded; 481*0b57cec5SDimitry Andric static _LIBCPP_CONSTEXPR const bool is_modulo = __base::is_modulo; 482*0b57cec5SDimitry Andric 483*0b57cec5SDimitry Andric static _LIBCPP_CONSTEXPR const bool traps = __base::traps; 484*0b57cec5SDimitry Andric static _LIBCPP_CONSTEXPR const bool tinyness_before = __base::tinyness_before; 485*0b57cec5SDimitry Andric static _LIBCPP_CONSTEXPR const float_round_style round_style = __base::round_style; 486*0b57cec5SDimitry Andric}; 487*0b57cec5SDimitry Andric 488*0b57cec5SDimitry Andrictemplate <class _Tp> 489*0b57cec5SDimitry Andric _LIBCPP_CONSTEXPR const bool numeric_limits<_Tp>::is_specialized; 490*0b57cec5SDimitry Andrictemplate <class _Tp> 491*0b57cec5SDimitry Andric _LIBCPP_CONSTEXPR const int numeric_limits<_Tp>::digits; 492*0b57cec5SDimitry Andrictemplate <class _Tp> 493*0b57cec5SDimitry Andric _LIBCPP_CONSTEXPR const int numeric_limits<_Tp>::digits10; 494*0b57cec5SDimitry Andrictemplate <class _Tp> 495*0b57cec5SDimitry Andric _LIBCPP_CONSTEXPR const int numeric_limits<_Tp>::max_digits10; 496*0b57cec5SDimitry Andrictemplate <class _Tp> 497*0b57cec5SDimitry Andric _LIBCPP_CONSTEXPR const bool numeric_limits<_Tp>::is_signed; 498*0b57cec5SDimitry Andrictemplate <class _Tp> 499*0b57cec5SDimitry Andric _LIBCPP_CONSTEXPR const bool numeric_limits<_Tp>::is_integer; 500*0b57cec5SDimitry Andrictemplate <class _Tp> 501*0b57cec5SDimitry Andric _LIBCPP_CONSTEXPR const bool numeric_limits<_Tp>::is_exact; 502*0b57cec5SDimitry Andrictemplate <class _Tp> 503*0b57cec5SDimitry Andric _LIBCPP_CONSTEXPR const int numeric_limits<_Tp>::radix; 504*0b57cec5SDimitry Andrictemplate <class _Tp> 505*0b57cec5SDimitry Andric _LIBCPP_CONSTEXPR const int numeric_limits<_Tp>::min_exponent; 506*0b57cec5SDimitry Andrictemplate <class _Tp> 507*0b57cec5SDimitry Andric _LIBCPP_CONSTEXPR const int numeric_limits<_Tp>::min_exponent10; 508*0b57cec5SDimitry Andrictemplate <class _Tp> 509*0b57cec5SDimitry Andric _LIBCPP_CONSTEXPR const int numeric_limits<_Tp>::max_exponent; 510*0b57cec5SDimitry Andrictemplate <class _Tp> 511*0b57cec5SDimitry Andric _LIBCPP_CONSTEXPR const int numeric_limits<_Tp>::max_exponent10; 512*0b57cec5SDimitry Andrictemplate <class _Tp> 513*0b57cec5SDimitry Andric _LIBCPP_CONSTEXPR const bool numeric_limits<_Tp>::has_infinity; 514*0b57cec5SDimitry Andrictemplate <class _Tp> 515*0b57cec5SDimitry Andric _LIBCPP_CONSTEXPR const bool numeric_limits<_Tp>::has_quiet_NaN; 516*0b57cec5SDimitry Andrictemplate <class _Tp> 517*0b57cec5SDimitry Andric _LIBCPP_CONSTEXPR const bool numeric_limits<_Tp>::has_signaling_NaN; 518*0b57cec5SDimitry Andrictemplate <class _Tp> 519*0b57cec5SDimitry Andric _LIBCPP_CONSTEXPR const float_denorm_style numeric_limits<_Tp>::has_denorm; 520*0b57cec5SDimitry Andrictemplate <class _Tp> 521*0b57cec5SDimitry Andric _LIBCPP_CONSTEXPR const bool numeric_limits<_Tp>::has_denorm_loss; 522*0b57cec5SDimitry Andrictemplate <class _Tp> 523*0b57cec5SDimitry Andric _LIBCPP_CONSTEXPR const bool numeric_limits<_Tp>::is_iec559; 524*0b57cec5SDimitry Andrictemplate <class _Tp> 525*0b57cec5SDimitry Andric _LIBCPP_CONSTEXPR const bool numeric_limits<_Tp>::is_bounded; 526*0b57cec5SDimitry Andrictemplate <class _Tp> 527*0b57cec5SDimitry Andric _LIBCPP_CONSTEXPR const bool numeric_limits<_Tp>::is_modulo; 528*0b57cec5SDimitry Andrictemplate <class _Tp> 529*0b57cec5SDimitry Andric _LIBCPP_CONSTEXPR const bool numeric_limits<_Tp>::traps; 530*0b57cec5SDimitry Andrictemplate <class _Tp> 531*0b57cec5SDimitry Andric _LIBCPP_CONSTEXPR const bool numeric_limits<_Tp>::tinyness_before; 532*0b57cec5SDimitry Andrictemplate <class _Tp> 533*0b57cec5SDimitry Andric _LIBCPP_CONSTEXPR const float_round_style numeric_limits<_Tp>::round_style; 534*0b57cec5SDimitry Andric 535*0b57cec5SDimitry Andrictemplate <class _Tp> 536*0b57cec5SDimitry Andricclass _LIBCPP_TEMPLATE_VIS numeric_limits<const _Tp> 537*0b57cec5SDimitry Andric : private numeric_limits<_Tp> 538*0b57cec5SDimitry Andric{ 539*0b57cec5SDimitry Andric typedef numeric_limits<_Tp> __base; 540*0b57cec5SDimitry Andric typedef _Tp type; 541*0b57cec5SDimitry Andricpublic: 542*0b57cec5SDimitry Andric static _LIBCPP_CONSTEXPR const bool is_specialized = __base::is_specialized; 543*0b57cec5SDimitry Andric _LIBCPP_INLINE_VISIBILITY static _LIBCPP_CONSTEXPR type min() _NOEXCEPT {return __base::min();} 544*0b57cec5SDimitry Andric _LIBCPP_INLINE_VISIBILITY static _LIBCPP_CONSTEXPR type max() _NOEXCEPT {return __base::max();} 545*0b57cec5SDimitry Andric _LIBCPP_INLINE_VISIBILITY static _LIBCPP_CONSTEXPR type lowest() _NOEXCEPT {return __base::lowest();} 546*0b57cec5SDimitry Andric 547*0b57cec5SDimitry Andric static _LIBCPP_CONSTEXPR const int digits = __base::digits; 548*0b57cec5SDimitry Andric static _LIBCPP_CONSTEXPR const int digits10 = __base::digits10; 549*0b57cec5SDimitry Andric static _LIBCPP_CONSTEXPR const int max_digits10 = __base::max_digits10; 550*0b57cec5SDimitry Andric static _LIBCPP_CONSTEXPR const bool is_signed = __base::is_signed; 551*0b57cec5SDimitry Andric static _LIBCPP_CONSTEXPR const bool is_integer = __base::is_integer; 552*0b57cec5SDimitry Andric static _LIBCPP_CONSTEXPR const bool is_exact = __base::is_exact; 553*0b57cec5SDimitry Andric static _LIBCPP_CONSTEXPR const int radix = __base::radix; 554*0b57cec5SDimitry Andric _LIBCPP_INLINE_VISIBILITY static _LIBCPP_CONSTEXPR type epsilon() _NOEXCEPT {return __base::epsilon();} 555*0b57cec5SDimitry Andric _LIBCPP_INLINE_VISIBILITY static _LIBCPP_CONSTEXPR type round_error() _NOEXCEPT {return __base::round_error();} 556*0b57cec5SDimitry Andric 557*0b57cec5SDimitry Andric static _LIBCPP_CONSTEXPR const int min_exponent = __base::min_exponent; 558*0b57cec5SDimitry Andric static _LIBCPP_CONSTEXPR const int min_exponent10 = __base::min_exponent10; 559*0b57cec5SDimitry Andric static _LIBCPP_CONSTEXPR const int max_exponent = __base::max_exponent; 560*0b57cec5SDimitry Andric static _LIBCPP_CONSTEXPR const int max_exponent10 = __base::max_exponent10; 561*0b57cec5SDimitry Andric 562*0b57cec5SDimitry Andric static _LIBCPP_CONSTEXPR const bool has_infinity = __base::has_infinity; 563*0b57cec5SDimitry Andric static _LIBCPP_CONSTEXPR const bool has_quiet_NaN = __base::has_quiet_NaN; 564*0b57cec5SDimitry Andric static _LIBCPP_CONSTEXPR const bool has_signaling_NaN = __base::has_signaling_NaN; 565*0b57cec5SDimitry Andric static _LIBCPP_CONSTEXPR const float_denorm_style has_denorm = __base::has_denorm; 566*0b57cec5SDimitry Andric static _LIBCPP_CONSTEXPR const bool has_denorm_loss = __base::has_denorm_loss; 567*0b57cec5SDimitry Andric _LIBCPP_INLINE_VISIBILITY static _LIBCPP_CONSTEXPR type infinity() _NOEXCEPT {return __base::infinity();} 568*0b57cec5SDimitry Andric _LIBCPP_INLINE_VISIBILITY static _LIBCPP_CONSTEXPR type quiet_NaN() _NOEXCEPT {return __base::quiet_NaN();} 569*0b57cec5SDimitry Andric _LIBCPP_INLINE_VISIBILITY static _LIBCPP_CONSTEXPR type signaling_NaN() _NOEXCEPT {return __base::signaling_NaN();} 570*0b57cec5SDimitry Andric _LIBCPP_INLINE_VISIBILITY static _LIBCPP_CONSTEXPR type denorm_min() _NOEXCEPT {return __base::denorm_min();} 571*0b57cec5SDimitry Andric 572*0b57cec5SDimitry Andric static _LIBCPP_CONSTEXPR const bool is_iec559 = __base::is_iec559; 573*0b57cec5SDimitry Andric static _LIBCPP_CONSTEXPR const bool is_bounded = __base::is_bounded; 574*0b57cec5SDimitry Andric static _LIBCPP_CONSTEXPR const bool is_modulo = __base::is_modulo; 575*0b57cec5SDimitry Andric 576*0b57cec5SDimitry Andric static _LIBCPP_CONSTEXPR const bool traps = __base::traps; 577*0b57cec5SDimitry Andric static _LIBCPP_CONSTEXPR const bool tinyness_before = __base::tinyness_before; 578*0b57cec5SDimitry Andric static _LIBCPP_CONSTEXPR const float_round_style round_style = __base::round_style; 579*0b57cec5SDimitry Andric}; 580*0b57cec5SDimitry Andric 581*0b57cec5SDimitry Andrictemplate <class _Tp> 582*0b57cec5SDimitry Andric _LIBCPP_CONSTEXPR const bool numeric_limits<const _Tp>::is_specialized; 583*0b57cec5SDimitry Andrictemplate <class _Tp> 584*0b57cec5SDimitry Andric _LIBCPP_CONSTEXPR const int numeric_limits<const _Tp>::digits; 585*0b57cec5SDimitry Andrictemplate <class _Tp> 586*0b57cec5SDimitry Andric _LIBCPP_CONSTEXPR const int numeric_limits<const _Tp>::digits10; 587*0b57cec5SDimitry Andrictemplate <class _Tp> 588*0b57cec5SDimitry Andric _LIBCPP_CONSTEXPR const int numeric_limits<const _Tp>::max_digits10; 589*0b57cec5SDimitry Andrictemplate <class _Tp> 590*0b57cec5SDimitry Andric _LIBCPP_CONSTEXPR const bool numeric_limits<const _Tp>::is_signed; 591*0b57cec5SDimitry Andrictemplate <class _Tp> 592*0b57cec5SDimitry Andric _LIBCPP_CONSTEXPR const bool numeric_limits<const _Tp>::is_integer; 593*0b57cec5SDimitry Andrictemplate <class _Tp> 594*0b57cec5SDimitry Andric _LIBCPP_CONSTEXPR const bool numeric_limits<const _Tp>::is_exact; 595*0b57cec5SDimitry Andrictemplate <class _Tp> 596*0b57cec5SDimitry Andric _LIBCPP_CONSTEXPR const int numeric_limits<const _Tp>::radix; 597*0b57cec5SDimitry Andrictemplate <class _Tp> 598*0b57cec5SDimitry Andric _LIBCPP_CONSTEXPR const int numeric_limits<const _Tp>::min_exponent; 599*0b57cec5SDimitry Andrictemplate <class _Tp> 600*0b57cec5SDimitry Andric _LIBCPP_CONSTEXPR const int numeric_limits<const _Tp>::min_exponent10; 601*0b57cec5SDimitry Andrictemplate <class _Tp> 602*0b57cec5SDimitry Andric _LIBCPP_CONSTEXPR const int numeric_limits<const _Tp>::max_exponent; 603*0b57cec5SDimitry Andrictemplate <class _Tp> 604*0b57cec5SDimitry Andric _LIBCPP_CONSTEXPR const int numeric_limits<const _Tp>::max_exponent10; 605*0b57cec5SDimitry Andrictemplate <class _Tp> 606*0b57cec5SDimitry Andric _LIBCPP_CONSTEXPR const bool numeric_limits<const _Tp>::has_infinity; 607*0b57cec5SDimitry Andrictemplate <class _Tp> 608*0b57cec5SDimitry Andric _LIBCPP_CONSTEXPR const bool numeric_limits<const _Tp>::has_quiet_NaN; 609*0b57cec5SDimitry Andrictemplate <class _Tp> 610*0b57cec5SDimitry Andric _LIBCPP_CONSTEXPR const bool numeric_limits<const _Tp>::has_signaling_NaN; 611*0b57cec5SDimitry Andrictemplate <class _Tp> 612*0b57cec5SDimitry Andric _LIBCPP_CONSTEXPR const float_denorm_style numeric_limits<const _Tp>::has_denorm; 613*0b57cec5SDimitry Andrictemplate <class _Tp> 614*0b57cec5SDimitry Andric _LIBCPP_CONSTEXPR const bool numeric_limits<const _Tp>::has_denorm_loss; 615*0b57cec5SDimitry Andrictemplate <class _Tp> 616*0b57cec5SDimitry Andric _LIBCPP_CONSTEXPR const bool numeric_limits<const _Tp>::is_iec559; 617*0b57cec5SDimitry Andrictemplate <class _Tp> 618*0b57cec5SDimitry Andric _LIBCPP_CONSTEXPR const bool numeric_limits<const _Tp>::is_bounded; 619*0b57cec5SDimitry Andrictemplate <class _Tp> 620*0b57cec5SDimitry Andric _LIBCPP_CONSTEXPR const bool numeric_limits<const _Tp>::is_modulo; 621*0b57cec5SDimitry Andrictemplate <class _Tp> 622*0b57cec5SDimitry Andric _LIBCPP_CONSTEXPR const bool numeric_limits<const _Tp>::traps; 623*0b57cec5SDimitry Andrictemplate <class _Tp> 624*0b57cec5SDimitry Andric _LIBCPP_CONSTEXPR const bool numeric_limits<const _Tp>::tinyness_before; 625*0b57cec5SDimitry Andrictemplate <class _Tp> 626*0b57cec5SDimitry Andric _LIBCPP_CONSTEXPR const float_round_style numeric_limits<const _Tp>::round_style; 627*0b57cec5SDimitry Andric 628*0b57cec5SDimitry Andrictemplate <class _Tp> 629*0b57cec5SDimitry Andricclass _LIBCPP_TEMPLATE_VIS numeric_limits<volatile _Tp> 630*0b57cec5SDimitry Andric : private numeric_limits<_Tp> 631*0b57cec5SDimitry Andric{ 632*0b57cec5SDimitry Andric typedef numeric_limits<_Tp> __base; 633*0b57cec5SDimitry Andric typedef _Tp type; 634*0b57cec5SDimitry Andricpublic: 635*0b57cec5SDimitry Andric static _LIBCPP_CONSTEXPR const bool is_specialized = __base::is_specialized; 636*0b57cec5SDimitry Andric _LIBCPP_INLINE_VISIBILITY static _LIBCPP_CONSTEXPR type min() _NOEXCEPT {return __base::min();} 637*0b57cec5SDimitry Andric _LIBCPP_INLINE_VISIBILITY static _LIBCPP_CONSTEXPR type max() _NOEXCEPT {return __base::max();} 638*0b57cec5SDimitry Andric _LIBCPP_INLINE_VISIBILITY static _LIBCPP_CONSTEXPR type lowest() _NOEXCEPT {return __base::lowest();} 639*0b57cec5SDimitry Andric 640*0b57cec5SDimitry Andric static _LIBCPP_CONSTEXPR const int digits = __base::digits; 641*0b57cec5SDimitry Andric static _LIBCPP_CONSTEXPR const int digits10 = __base::digits10; 642*0b57cec5SDimitry Andric static _LIBCPP_CONSTEXPR const int max_digits10 = __base::max_digits10; 643*0b57cec5SDimitry Andric static _LIBCPP_CONSTEXPR const bool is_signed = __base::is_signed; 644*0b57cec5SDimitry Andric static _LIBCPP_CONSTEXPR const bool is_integer = __base::is_integer; 645*0b57cec5SDimitry Andric static _LIBCPP_CONSTEXPR const bool is_exact = __base::is_exact; 646*0b57cec5SDimitry Andric static _LIBCPP_CONSTEXPR const int radix = __base::radix; 647*0b57cec5SDimitry Andric _LIBCPP_INLINE_VISIBILITY static _LIBCPP_CONSTEXPR type epsilon() _NOEXCEPT {return __base::epsilon();} 648*0b57cec5SDimitry Andric _LIBCPP_INLINE_VISIBILITY static _LIBCPP_CONSTEXPR type round_error() _NOEXCEPT {return __base::round_error();} 649*0b57cec5SDimitry Andric 650*0b57cec5SDimitry Andric static _LIBCPP_CONSTEXPR const int min_exponent = __base::min_exponent; 651*0b57cec5SDimitry Andric static _LIBCPP_CONSTEXPR const int min_exponent10 = __base::min_exponent10; 652*0b57cec5SDimitry Andric static _LIBCPP_CONSTEXPR const int max_exponent = __base::max_exponent; 653*0b57cec5SDimitry Andric static _LIBCPP_CONSTEXPR const int max_exponent10 = __base::max_exponent10; 654*0b57cec5SDimitry Andric 655*0b57cec5SDimitry Andric static _LIBCPP_CONSTEXPR const bool has_infinity = __base::has_infinity; 656*0b57cec5SDimitry Andric static _LIBCPP_CONSTEXPR const bool has_quiet_NaN = __base::has_quiet_NaN; 657*0b57cec5SDimitry Andric static _LIBCPP_CONSTEXPR const bool has_signaling_NaN = __base::has_signaling_NaN; 658*0b57cec5SDimitry Andric static _LIBCPP_CONSTEXPR const float_denorm_style has_denorm = __base::has_denorm; 659*0b57cec5SDimitry Andric static _LIBCPP_CONSTEXPR const bool has_denorm_loss = __base::has_denorm_loss; 660*0b57cec5SDimitry Andric _LIBCPP_INLINE_VISIBILITY static _LIBCPP_CONSTEXPR type infinity() _NOEXCEPT {return __base::infinity();} 661*0b57cec5SDimitry Andric _LIBCPP_INLINE_VISIBILITY static _LIBCPP_CONSTEXPR type quiet_NaN() _NOEXCEPT {return __base::quiet_NaN();} 662*0b57cec5SDimitry Andric _LIBCPP_INLINE_VISIBILITY static _LIBCPP_CONSTEXPR type signaling_NaN() _NOEXCEPT {return __base::signaling_NaN();} 663*0b57cec5SDimitry Andric _LIBCPP_INLINE_VISIBILITY static _LIBCPP_CONSTEXPR type denorm_min() _NOEXCEPT {return __base::denorm_min();} 664*0b57cec5SDimitry Andric 665*0b57cec5SDimitry Andric static _LIBCPP_CONSTEXPR const bool is_iec559 = __base::is_iec559; 666*0b57cec5SDimitry Andric static _LIBCPP_CONSTEXPR const bool is_bounded = __base::is_bounded; 667*0b57cec5SDimitry Andric static _LIBCPP_CONSTEXPR const bool is_modulo = __base::is_modulo; 668*0b57cec5SDimitry Andric 669*0b57cec5SDimitry Andric static _LIBCPP_CONSTEXPR const bool traps = __base::traps; 670*0b57cec5SDimitry Andric static _LIBCPP_CONSTEXPR const bool tinyness_before = __base::tinyness_before; 671*0b57cec5SDimitry Andric static _LIBCPP_CONSTEXPR const float_round_style round_style = __base::round_style; 672*0b57cec5SDimitry Andric}; 673*0b57cec5SDimitry Andric 674*0b57cec5SDimitry Andrictemplate <class _Tp> 675*0b57cec5SDimitry Andric _LIBCPP_CONSTEXPR const bool numeric_limits<volatile _Tp>::is_specialized; 676*0b57cec5SDimitry Andrictemplate <class _Tp> 677*0b57cec5SDimitry Andric _LIBCPP_CONSTEXPR const int numeric_limits<volatile _Tp>::digits; 678*0b57cec5SDimitry Andrictemplate <class _Tp> 679*0b57cec5SDimitry Andric _LIBCPP_CONSTEXPR const int numeric_limits<volatile _Tp>::digits10; 680*0b57cec5SDimitry Andrictemplate <class _Tp> 681*0b57cec5SDimitry Andric _LIBCPP_CONSTEXPR const int numeric_limits<volatile _Tp>::max_digits10; 682*0b57cec5SDimitry Andrictemplate <class _Tp> 683*0b57cec5SDimitry Andric _LIBCPP_CONSTEXPR const bool numeric_limits<volatile _Tp>::is_signed; 684*0b57cec5SDimitry Andrictemplate <class _Tp> 685*0b57cec5SDimitry Andric _LIBCPP_CONSTEXPR const bool numeric_limits<volatile _Tp>::is_integer; 686*0b57cec5SDimitry Andrictemplate <class _Tp> 687*0b57cec5SDimitry Andric _LIBCPP_CONSTEXPR const bool numeric_limits<volatile _Tp>::is_exact; 688*0b57cec5SDimitry Andrictemplate <class _Tp> 689*0b57cec5SDimitry Andric _LIBCPP_CONSTEXPR const int numeric_limits<volatile _Tp>::radix; 690*0b57cec5SDimitry Andrictemplate <class _Tp> 691*0b57cec5SDimitry Andric _LIBCPP_CONSTEXPR const int numeric_limits<volatile _Tp>::min_exponent; 692*0b57cec5SDimitry Andrictemplate <class _Tp> 693*0b57cec5SDimitry Andric _LIBCPP_CONSTEXPR const int numeric_limits<volatile _Tp>::min_exponent10; 694*0b57cec5SDimitry Andrictemplate <class _Tp> 695*0b57cec5SDimitry Andric _LIBCPP_CONSTEXPR const int numeric_limits<volatile _Tp>::max_exponent; 696*0b57cec5SDimitry Andrictemplate <class _Tp> 697*0b57cec5SDimitry Andric _LIBCPP_CONSTEXPR const int numeric_limits<volatile _Tp>::max_exponent10; 698*0b57cec5SDimitry Andrictemplate <class _Tp> 699*0b57cec5SDimitry Andric _LIBCPP_CONSTEXPR const bool numeric_limits<volatile _Tp>::has_infinity; 700*0b57cec5SDimitry Andrictemplate <class _Tp> 701*0b57cec5SDimitry Andric _LIBCPP_CONSTEXPR const bool numeric_limits<volatile _Tp>::has_quiet_NaN; 702*0b57cec5SDimitry Andrictemplate <class _Tp> 703*0b57cec5SDimitry Andric _LIBCPP_CONSTEXPR const bool numeric_limits<volatile _Tp>::has_signaling_NaN; 704*0b57cec5SDimitry Andrictemplate <class _Tp> 705*0b57cec5SDimitry Andric _LIBCPP_CONSTEXPR const float_denorm_style numeric_limits<volatile _Tp>::has_denorm; 706*0b57cec5SDimitry Andrictemplate <class _Tp> 707*0b57cec5SDimitry Andric _LIBCPP_CONSTEXPR const bool numeric_limits<volatile _Tp>::has_denorm_loss; 708*0b57cec5SDimitry Andrictemplate <class _Tp> 709*0b57cec5SDimitry Andric _LIBCPP_CONSTEXPR const bool numeric_limits<volatile _Tp>::is_iec559; 710*0b57cec5SDimitry Andrictemplate <class _Tp> 711*0b57cec5SDimitry Andric _LIBCPP_CONSTEXPR const bool numeric_limits<volatile _Tp>::is_bounded; 712*0b57cec5SDimitry Andrictemplate <class _Tp> 713*0b57cec5SDimitry Andric _LIBCPP_CONSTEXPR const bool numeric_limits<volatile _Tp>::is_modulo; 714*0b57cec5SDimitry Andrictemplate <class _Tp> 715*0b57cec5SDimitry Andric _LIBCPP_CONSTEXPR const bool numeric_limits<volatile _Tp>::traps; 716*0b57cec5SDimitry Andrictemplate <class _Tp> 717*0b57cec5SDimitry Andric _LIBCPP_CONSTEXPR const bool numeric_limits<volatile _Tp>::tinyness_before; 718*0b57cec5SDimitry Andrictemplate <class _Tp> 719*0b57cec5SDimitry Andric _LIBCPP_CONSTEXPR const float_round_style numeric_limits<volatile _Tp>::round_style; 720*0b57cec5SDimitry Andric 721*0b57cec5SDimitry Andrictemplate <class _Tp> 722*0b57cec5SDimitry Andricclass _LIBCPP_TEMPLATE_VIS numeric_limits<const volatile _Tp> 723*0b57cec5SDimitry Andric : private numeric_limits<_Tp> 724*0b57cec5SDimitry Andric{ 725*0b57cec5SDimitry Andric typedef numeric_limits<_Tp> __base; 726*0b57cec5SDimitry Andric typedef _Tp type; 727*0b57cec5SDimitry Andricpublic: 728*0b57cec5SDimitry Andric static _LIBCPP_CONSTEXPR const bool is_specialized = __base::is_specialized; 729*0b57cec5SDimitry Andric _LIBCPP_INLINE_VISIBILITY static _LIBCPP_CONSTEXPR type min() _NOEXCEPT {return __base::min();} 730*0b57cec5SDimitry Andric _LIBCPP_INLINE_VISIBILITY static _LIBCPP_CONSTEXPR type max() _NOEXCEPT {return __base::max();} 731*0b57cec5SDimitry Andric _LIBCPP_INLINE_VISIBILITY static _LIBCPP_CONSTEXPR type lowest() _NOEXCEPT {return __base::lowest();} 732*0b57cec5SDimitry Andric 733*0b57cec5SDimitry Andric static _LIBCPP_CONSTEXPR const int digits = __base::digits; 734*0b57cec5SDimitry Andric static _LIBCPP_CONSTEXPR const int digits10 = __base::digits10; 735*0b57cec5SDimitry Andric static _LIBCPP_CONSTEXPR const int max_digits10 = __base::max_digits10; 736*0b57cec5SDimitry Andric static _LIBCPP_CONSTEXPR const bool is_signed = __base::is_signed; 737*0b57cec5SDimitry Andric static _LIBCPP_CONSTEXPR const bool is_integer = __base::is_integer; 738*0b57cec5SDimitry Andric static _LIBCPP_CONSTEXPR const bool is_exact = __base::is_exact; 739*0b57cec5SDimitry Andric static _LIBCPP_CONSTEXPR const int radix = __base::radix; 740*0b57cec5SDimitry Andric _LIBCPP_INLINE_VISIBILITY static _LIBCPP_CONSTEXPR type epsilon() _NOEXCEPT {return __base::epsilon();} 741*0b57cec5SDimitry Andric _LIBCPP_INLINE_VISIBILITY static _LIBCPP_CONSTEXPR type round_error() _NOEXCEPT {return __base::round_error();} 742*0b57cec5SDimitry Andric 743*0b57cec5SDimitry Andric static _LIBCPP_CONSTEXPR const int min_exponent = __base::min_exponent; 744*0b57cec5SDimitry Andric static _LIBCPP_CONSTEXPR const int min_exponent10 = __base::min_exponent10; 745*0b57cec5SDimitry Andric static _LIBCPP_CONSTEXPR const int max_exponent = __base::max_exponent; 746*0b57cec5SDimitry Andric static _LIBCPP_CONSTEXPR const int max_exponent10 = __base::max_exponent10; 747*0b57cec5SDimitry Andric 748*0b57cec5SDimitry Andric static _LIBCPP_CONSTEXPR const bool has_infinity = __base::has_infinity; 749*0b57cec5SDimitry Andric static _LIBCPP_CONSTEXPR const bool has_quiet_NaN = __base::has_quiet_NaN; 750*0b57cec5SDimitry Andric static _LIBCPP_CONSTEXPR const bool has_signaling_NaN = __base::has_signaling_NaN; 751*0b57cec5SDimitry Andric static _LIBCPP_CONSTEXPR const float_denorm_style has_denorm = __base::has_denorm; 752*0b57cec5SDimitry Andric static _LIBCPP_CONSTEXPR const bool has_denorm_loss = __base::has_denorm_loss; 753*0b57cec5SDimitry Andric _LIBCPP_INLINE_VISIBILITY static _LIBCPP_CONSTEXPR type infinity() _NOEXCEPT {return __base::infinity();} 754*0b57cec5SDimitry Andric _LIBCPP_INLINE_VISIBILITY static _LIBCPP_CONSTEXPR type quiet_NaN() _NOEXCEPT {return __base::quiet_NaN();} 755*0b57cec5SDimitry Andric _LIBCPP_INLINE_VISIBILITY static _LIBCPP_CONSTEXPR type signaling_NaN() _NOEXCEPT {return __base::signaling_NaN();} 756*0b57cec5SDimitry Andric _LIBCPP_INLINE_VISIBILITY static _LIBCPP_CONSTEXPR type denorm_min() _NOEXCEPT {return __base::denorm_min();} 757*0b57cec5SDimitry Andric 758*0b57cec5SDimitry Andric static _LIBCPP_CONSTEXPR const bool is_iec559 = __base::is_iec559; 759*0b57cec5SDimitry Andric static _LIBCPP_CONSTEXPR const bool is_bounded = __base::is_bounded; 760*0b57cec5SDimitry Andric static _LIBCPP_CONSTEXPR const bool is_modulo = __base::is_modulo; 761*0b57cec5SDimitry Andric 762*0b57cec5SDimitry Andric static _LIBCPP_CONSTEXPR const bool traps = __base::traps; 763*0b57cec5SDimitry Andric static _LIBCPP_CONSTEXPR const bool tinyness_before = __base::tinyness_before; 764*0b57cec5SDimitry Andric static _LIBCPP_CONSTEXPR const float_round_style round_style = __base::round_style; 765*0b57cec5SDimitry Andric}; 766*0b57cec5SDimitry Andric 767*0b57cec5SDimitry Andrictemplate <class _Tp> 768*0b57cec5SDimitry Andric _LIBCPP_CONSTEXPR const bool numeric_limits<const volatile _Tp>::is_specialized; 769*0b57cec5SDimitry Andrictemplate <class _Tp> 770*0b57cec5SDimitry Andric _LIBCPP_CONSTEXPR const int numeric_limits<const volatile _Tp>::digits; 771*0b57cec5SDimitry Andrictemplate <class _Tp> 772*0b57cec5SDimitry Andric _LIBCPP_CONSTEXPR const int numeric_limits<const volatile _Tp>::digits10; 773*0b57cec5SDimitry Andrictemplate <class _Tp> 774*0b57cec5SDimitry Andric _LIBCPP_CONSTEXPR const int numeric_limits<const volatile _Tp>::max_digits10; 775*0b57cec5SDimitry Andrictemplate <class _Tp> 776*0b57cec5SDimitry Andric _LIBCPP_CONSTEXPR const bool numeric_limits<const volatile _Tp>::is_signed; 777*0b57cec5SDimitry Andrictemplate <class _Tp> 778*0b57cec5SDimitry Andric _LIBCPP_CONSTEXPR const bool numeric_limits<const volatile _Tp>::is_integer; 779*0b57cec5SDimitry Andrictemplate <class _Tp> 780*0b57cec5SDimitry Andric _LIBCPP_CONSTEXPR const bool numeric_limits<const volatile _Tp>::is_exact; 781*0b57cec5SDimitry Andrictemplate <class _Tp> 782*0b57cec5SDimitry Andric _LIBCPP_CONSTEXPR const int numeric_limits<const volatile _Tp>::radix; 783*0b57cec5SDimitry Andrictemplate <class _Tp> 784*0b57cec5SDimitry Andric _LIBCPP_CONSTEXPR const int numeric_limits<const volatile _Tp>::min_exponent; 785*0b57cec5SDimitry Andrictemplate <class _Tp> 786*0b57cec5SDimitry Andric _LIBCPP_CONSTEXPR const int numeric_limits<const volatile _Tp>::min_exponent10; 787*0b57cec5SDimitry Andrictemplate <class _Tp> 788*0b57cec5SDimitry Andric _LIBCPP_CONSTEXPR const int numeric_limits<const volatile _Tp>::max_exponent; 789*0b57cec5SDimitry Andrictemplate <class _Tp> 790*0b57cec5SDimitry Andric _LIBCPP_CONSTEXPR const int numeric_limits<const volatile _Tp>::max_exponent10; 791*0b57cec5SDimitry Andrictemplate <class _Tp> 792*0b57cec5SDimitry Andric _LIBCPP_CONSTEXPR const bool numeric_limits<const volatile _Tp>::has_infinity; 793*0b57cec5SDimitry Andrictemplate <class _Tp> 794*0b57cec5SDimitry Andric _LIBCPP_CONSTEXPR const bool numeric_limits<const volatile _Tp>::has_quiet_NaN; 795*0b57cec5SDimitry Andrictemplate <class _Tp> 796*0b57cec5SDimitry Andric _LIBCPP_CONSTEXPR const bool numeric_limits<const volatile _Tp>::has_signaling_NaN; 797*0b57cec5SDimitry Andrictemplate <class _Tp> 798*0b57cec5SDimitry Andric _LIBCPP_CONSTEXPR const float_denorm_style numeric_limits<const volatile _Tp>::has_denorm; 799*0b57cec5SDimitry Andrictemplate <class _Tp> 800*0b57cec5SDimitry Andric _LIBCPP_CONSTEXPR const bool numeric_limits<const volatile _Tp>::has_denorm_loss; 801*0b57cec5SDimitry Andrictemplate <class _Tp> 802*0b57cec5SDimitry Andric _LIBCPP_CONSTEXPR const bool numeric_limits<const volatile _Tp>::is_iec559; 803*0b57cec5SDimitry Andrictemplate <class _Tp> 804*0b57cec5SDimitry Andric _LIBCPP_CONSTEXPR const bool numeric_limits<const volatile _Tp>::is_bounded; 805*0b57cec5SDimitry Andrictemplate <class _Tp> 806*0b57cec5SDimitry Andric _LIBCPP_CONSTEXPR const bool numeric_limits<const volatile _Tp>::is_modulo; 807*0b57cec5SDimitry Andrictemplate <class _Tp> 808*0b57cec5SDimitry Andric _LIBCPP_CONSTEXPR const bool numeric_limits<const volatile _Tp>::traps; 809*0b57cec5SDimitry Andrictemplate <class _Tp> 810*0b57cec5SDimitry Andric _LIBCPP_CONSTEXPR const bool numeric_limits<const volatile _Tp>::tinyness_before; 811*0b57cec5SDimitry Andrictemplate <class _Tp> 812*0b57cec5SDimitry Andric _LIBCPP_CONSTEXPR const float_round_style numeric_limits<const volatile _Tp>::round_style; 813*0b57cec5SDimitry Andric 814*0b57cec5SDimitry Andric_LIBCPP_END_NAMESPACE_STD 815*0b57cec5SDimitry Andric 816*0b57cec5SDimitry Andric_LIBCPP_POP_MACROS 817*0b57cec5SDimitry Andric 818*0b57cec5SDimitry Andric#endif // _LIBCPP_LIMITS 819