LCOV - code coverage report
Current view: top level - v1 - limits (source / functions) Coverage Total Hit
Test: vrml_testfiles.info Lines: 100.0 % 2 2
Test Date: 2024-03-08 16:12:17 Functions: 100.0 % 4 4

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

Generated by: LCOV version 2.0-1