xref: /minix3/external/bsd/libc++/dist/libcxx/include/limits (revision 0a6a1f1d05b60e214de2f05a7310ddd1f0e590e7)
14684ddb6SLionel Sambuc// -*- C++ -*-
24684ddb6SLionel Sambuc//===---------------------------- limits ----------------------------------===//
34684ddb6SLionel Sambuc//
44684ddb6SLionel Sambuc//                     The LLVM Compiler Infrastructure
54684ddb6SLionel Sambuc//
64684ddb6SLionel Sambuc// This file is dual licensed under the MIT and the University of Illinois Open
74684ddb6SLionel Sambuc// Source Licenses. See LICENSE.TXT for details.
84684ddb6SLionel Sambuc//
94684ddb6SLionel Sambuc//===----------------------------------------------------------------------===//
104684ddb6SLionel Sambuc
114684ddb6SLionel Sambuc#ifndef _LIBCPP_LIMITS
124684ddb6SLionel Sambuc#define _LIBCPP_LIMITS
134684ddb6SLionel Sambuc
144684ddb6SLionel Sambuc/*
154684ddb6SLionel Sambuc    limits synopsis
164684ddb6SLionel Sambuc
174684ddb6SLionel Sambucnamespace std
184684ddb6SLionel Sambuc{
194684ddb6SLionel Sambuc
204684ddb6SLionel Sambuctemplate<class T>
214684ddb6SLionel Sambucclass numeric_limits
224684ddb6SLionel Sambuc{
234684ddb6SLionel Sambucpublic:
244684ddb6SLionel Sambuc    static constexpr bool is_specialized = false;
254684ddb6SLionel Sambuc    static constexpr T min() noexcept;
264684ddb6SLionel Sambuc    static constexpr T max() noexcept;
274684ddb6SLionel Sambuc    static constexpr T lowest() noexcept;
284684ddb6SLionel Sambuc
294684ddb6SLionel Sambuc    static constexpr int  digits = 0;
304684ddb6SLionel Sambuc    static constexpr int  digits10 = 0;
314684ddb6SLionel Sambuc    static constexpr int  max_digits10 = 0;
324684ddb6SLionel Sambuc    static constexpr bool is_signed = false;
334684ddb6SLionel Sambuc    static constexpr bool is_integer = false;
344684ddb6SLionel Sambuc    static constexpr bool is_exact = false;
354684ddb6SLionel Sambuc    static constexpr int  radix = 0;
364684ddb6SLionel Sambuc    static constexpr T epsilon() noexcept;
374684ddb6SLionel Sambuc    static constexpr T round_error() noexcept;
384684ddb6SLionel Sambuc
394684ddb6SLionel Sambuc    static constexpr int  min_exponent = 0;
404684ddb6SLionel Sambuc    static constexpr int  min_exponent10 = 0;
414684ddb6SLionel Sambuc    static constexpr int  max_exponent = 0;
424684ddb6SLionel Sambuc    static constexpr int  max_exponent10 = 0;
434684ddb6SLionel Sambuc
444684ddb6SLionel Sambuc    static constexpr bool has_infinity = false;
454684ddb6SLionel Sambuc    static constexpr bool has_quiet_NaN = false;
464684ddb6SLionel Sambuc    static constexpr bool has_signaling_NaN = false;
474684ddb6SLionel Sambuc    static constexpr float_denorm_style has_denorm = denorm_absent;
484684ddb6SLionel Sambuc    static constexpr bool has_denorm_loss = false;
494684ddb6SLionel Sambuc    static constexpr T infinity() noexcept;
504684ddb6SLionel Sambuc    static constexpr T quiet_NaN() noexcept;
514684ddb6SLionel Sambuc    static constexpr T signaling_NaN() noexcept;
524684ddb6SLionel Sambuc    static constexpr T denorm_min() noexcept;
534684ddb6SLionel Sambuc
544684ddb6SLionel Sambuc    static constexpr bool is_iec559 = false;
554684ddb6SLionel Sambuc    static constexpr bool is_bounded = false;
564684ddb6SLionel Sambuc    static constexpr bool is_modulo = false;
574684ddb6SLionel Sambuc
584684ddb6SLionel Sambuc    static constexpr bool traps = false;
594684ddb6SLionel Sambuc    static constexpr bool tinyness_before = false;
604684ddb6SLionel Sambuc    static constexpr float_round_style round_style = round_toward_zero;
614684ddb6SLionel Sambuc};
624684ddb6SLionel Sambuc
634684ddb6SLionel Sambucenum float_round_style
644684ddb6SLionel Sambuc{
654684ddb6SLionel Sambuc    round_indeterminate       = -1,
664684ddb6SLionel Sambuc    round_toward_zero         =  0,
674684ddb6SLionel Sambuc    round_to_nearest          =  1,
684684ddb6SLionel Sambuc    round_toward_infinity     =  2,
694684ddb6SLionel Sambuc    round_toward_neg_infinity =  3
704684ddb6SLionel Sambuc};
714684ddb6SLionel Sambuc
724684ddb6SLionel Sambucenum float_denorm_style
734684ddb6SLionel Sambuc{
744684ddb6SLionel Sambuc    denorm_indeterminate = -1,
754684ddb6SLionel Sambuc    denorm_absent = 0,
764684ddb6SLionel Sambuc    denorm_present = 1
774684ddb6SLionel Sambuc};
784684ddb6SLionel Sambuc
794684ddb6SLionel Sambuctemplate<> class numeric_limits<cv bool>;
804684ddb6SLionel Sambuc
814684ddb6SLionel Sambuctemplate<> class numeric_limits<cv char>;
824684ddb6SLionel Sambuctemplate<> class numeric_limits<cv signed char>;
834684ddb6SLionel Sambuctemplate<> class numeric_limits<cv unsigned char>;
844684ddb6SLionel Sambuctemplate<> class numeric_limits<cv wchar_t>;
854684ddb6SLionel Sambuctemplate<> class numeric_limits<cv char16_t>;
864684ddb6SLionel Sambuctemplate<> class numeric_limits<cv char32_t>;
874684ddb6SLionel Sambuc
884684ddb6SLionel Sambuctemplate<> class numeric_limits<cv short>;
894684ddb6SLionel Sambuctemplate<> class numeric_limits<cv int>;
904684ddb6SLionel Sambuctemplate<> class numeric_limits<cv long>;
914684ddb6SLionel Sambuctemplate<> class numeric_limits<cv long long>;
924684ddb6SLionel Sambuctemplate<> class numeric_limits<cv unsigned short>;
934684ddb6SLionel Sambuctemplate<> class numeric_limits<cv unsigned int>;
944684ddb6SLionel Sambuctemplate<> class numeric_limits<cv unsigned long>;
954684ddb6SLionel Sambuctemplate<> class numeric_limits<cv unsigned long long>;
964684ddb6SLionel Sambuc
974684ddb6SLionel Sambuctemplate<> class numeric_limits<cv float>;
984684ddb6SLionel Sambuctemplate<> class numeric_limits<cv double>;
994684ddb6SLionel Sambuctemplate<> class numeric_limits<cv long double>;
1004684ddb6SLionel Sambuc
1014684ddb6SLionel Sambuc}  // std
1024684ddb6SLionel Sambuc
1034684ddb6SLionel Sambuc*/
1044684ddb6SLionel Sambuc
1054684ddb6SLionel Sambuc#if !defined(_LIBCPP_HAS_NO_PRAGMA_SYSTEM_HEADER)
1064684ddb6SLionel Sambuc#pragma GCC system_header
1074684ddb6SLionel Sambuc#endif
1084684ddb6SLionel Sambuc
1094684ddb6SLionel Sambuc#include <__config>
1104684ddb6SLionel Sambuc#include <type_traits>
1114684ddb6SLionel Sambuc
1124684ddb6SLionel Sambuc#include <__undef_min_max>
1134684ddb6SLionel Sambuc
1144684ddb6SLionel Sambuc#if defined(_LIBCPP_MSVCRT)
1154684ddb6SLionel Sambuc#include "support/win32/limits_win32.h"
1164684ddb6SLionel Sambuc#endif // _LIBCPP_MSVCRT
1174684ddb6SLionel Sambuc
1184684ddb6SLionel Sambuc#if defined(__IBMCPP__)
1194684ddb6SLionel Sambuc#include "support/ibm/limits.h"
1204684ddb6SLionel Sambuc#endif // __IBMCPP__
1214684ddb6SLionel Sambuc
1224684ddb6SLionel Sambuc_LIBCPP_BEGIN_NAMESPACE_STD
1234684ddb6SLionel Sambuc
1244684ddb6SLionel Sambucenum float_round_style
1254684ddb6SLionel Sambuc{
1264684ddb6SLionel Sambuc    round_indeterminate       = -1,
1274684ddb6SLionel Sambuc    round_toward_zero         =  0,
1284684ddb6SLionel Sambuc    round_to_nearest          =  1,
1294684ddb6SLionel Sambuc    round_toward_infinity     =  2,
1304684ddb6SLionel Sambuc    round_toward_neg_infinity =  3
1314684ddb6SLionel Sambuc};
1324684ddb6SLionel Sambuc
1334684ddb6SLionel Sambucenum float_denorm_style
1344684ddb6SLionel Sambuc{
1354684ddb6SLionel Sambuc    denorm_indeterminate = -1,
1364684ddb6SLionel Sambuc    denorm_absent = 0,
1374684ddb6SLionel Sambuc    denorm_present = 1
1384684ddb6SLionel Sambuc};
1394684ddb6SLionel Sambuc
1404684ddb6SLionel Sambuctemplate <class _Tp, bool = is_arithmetic<_Tp>::value>
1414684ddb6SLionel Sambucclass __libcpp_numeric_limits
1424684ddb6SLionel Sambuc{
1434684ddb6SLionel Sambucprotected:
1444684ddb6SLionel Sambuc    typedef _Tp type;
1454684ddb6SLionel Sambuc
1464684ddb6SLionel Sambuc    static _LIBCPP_CONSTEXPR const  bool is_specialized = false;
1474684ddb6SLionel Sambuc    _LIBCPP_INLINE_VISIBILITY static _LIBCPP_CONSTEXPR type min() _NOEXCEPT {return type();}
1484684ddb6SLionel Sambuc    _LIBCPP_INLINE_VISIBILITY static _LIBCPP_CONSTEXPR type max() _NOEXCEPT {return type();}
1494684ddb6SLionel Sambuc    _LIBCPP_INLINE_VISIBILITY static _LIBCPP_CONSTEXPR type lowest() _NOEXCEPT {return type();}
1504684ddb6SLionel Sambuc
1514684ddb6SLionel Sambuc    static _LIBCPP_CONSTEXPR const int  digits = 0;
1524684ddb6SLionel Sambuc    static _LIBCPP_CONSTEXPR const int  digits10 = 0;
1534684ddb6SLionel Sambuc    static _LIBCPP_CONSTEXPR const int  max_digits10 = 0;
1544684ddb6SLionel Sambuc    static _LIBCPP_CONSTEXPR const bool is_signed = false;
1554684ddb6SLionel Sambuc    static _LIBCPP_CONSTEXPR const bool is_integer = false;
1564684ddb6SLionel Sambuc    static _LIBCPP_CONSTEXPR const bool is_exact = false;
1574684ddb6SLionel Sambuc    static _LIBCPP_CONSTEXPR const int  radix = 0;
1584684ddb6SLionel Sambuc    _LIBCPP_INLINE_VISIBILITY static _LIBCPP_CONSTEXPR type epsilon() _NOEXCEPT {return type();}
1594684ddb6SLionel Sambuc    _LIBCPP_INLINE_VISIBILITY static _LIBCPP_CONSTEXPR type round_error() _NOEXCEPT {return type();}
1604684ddb6SLionel Sambuc
1614684ddb6SLionel Sambuc    static _LIBCPP_CONSTEXPR const int  min_exponent = 0;
1624684ddb6SLionel Sambuc    static _LIBCPP_CONSTEXPR const int  min_exponent10 = 0;
1634684ddb6SLionel Sambuc    static _LIBCPP_CONSTEXPR const int  max_exponent = 0;
1644684ddb6SLionel Sambuc    static _LIBCPP_CONSTEXPR const int  max_exponent10 = 0;
1654684ddb6SLionel Sambuc
1664684ddb6SLionel Sambuc    static _LIBCPP_CONSTEXPR const bool has_infinity = false;
1674684ddb6SLionel Sambuc    static _LIBCPP_CONSTEXPR const bool has_quiet_NaN = false;
1684684ddb6SLionel Sambuc    static _LIBCPP_CONSTEXPR const bool has_signaling_NaN = false;
1694684ddb6SLionel Sambuc    static _LIBCPP_CONSTEXPR const float_denorm_style has_denorm = denorm_absent;
1704684ddb6SLionel Sambuc    static _LIBCPP_CONSTEXPR const bool has_denorm_loss = false;
1714684ddb6SLionel Sambuc    _LIBCPP_INLINE_VISIBILITY static _LIBCPP_CONSTEXPR type infinity() _NOEXCEPT {return type();}
1724684ddb6SLionel Sambuc    _LIBCPP_INLINE_VISIBILITY static _LIBCPP_CONSTEXPR type quiet_NaN() _NOEXCEPT {return type();}
1734684ddb6SLionel Sambuc    _LIBCPP_INLINE_VISIBILITY static _LIBCPP_CONSTEXPR type signaling_NaN() _NOEXCEPT {return type();}
1744684ddb6SLionel Sambuc    _LIBCPP_INLINE_VISIBILITY static _LIBCPP_CONSTEXPR type denorm_min() _NOEXCEPT {return type();}
1754684ddb6SLionel Sambuc
1764684ddb6SLionel Sambuc    static _LIBCPP_CONSTEXPR const bool is_iec559 = false;
1774684ddb6SLionel Sambuc    static _LIBCPP_CONSTEXPR const bool is_bounded = false;
1784684ddb6SLionel Sambuc    static _LIBCPP_CONSTEXPR const bool is_modulo = false;
1794684ddb6SLionel Sambuc
1804684ddb6SLionel Sambuc    static _LIBCPP_CONSTEXPR const bool traps = false;
1814684ddb6SLionel Sambuc    static _LIBCPP_CONSTEXPR const bool tinyness_before = false;
1824684ddb6SLionel Sambuc    static _LIBCPP_CONSTEXPR const float_round_style round_style = round_toward_zero;
1834684ddb6SLionel Sambuc};
1844684ddb6SLionel Sambuc
1854684ddb6SLionel Sambuctemplate <class _Tp, int digits, bool is_signed>
1864684ddb6SLionel Sambucstruct __libcpp_compute_min
1874684ddb6SLionel Sambuc{
1884684ddb6SLionel Sambuc    static _LIBCPP_CONSTEXPR const _Tp value = _Tp(_Tp(1) << digits);
1894684ddb6SLionel Sambuc};
1904684ddb6SLionel Sambuc
1914684ddb6SLionel Sambuctemplate <class _Tp, int digits>
1924684ddb6SLionel Sambucstruct __libcpp_compute_min<_Tp, digits, false>
1934684ddb6SLionel Sambuc{
1944684ddb6SLionel Sambuc    static _LIBCPP_CONSTEXPR const _Tp value = _Tp(0);
1954684ddb6SLionel Sambuc};
1964684ddb6SLionel Sambuc
1974684ddb6SLionel Sambuctemplate <class _Tp>
1984684ddb6SLionel Sambucclass __libcpp_numeric_limits<_Tp, true>
1994684ddb6SLionel Sambuc{
2004684ddb6SLionel Sambucprotected:
2014684ddb6SLionel Sambuc    typedef _Tp type;
2024684ddb6SLionel Sambuc
2034684ddb6SLionel Sambuc    static _LIBCPP_CONSTEXPR const bool is_specialized = true;
2044684ddb6SLionel Sambuc
2054684ddb6SLionel Sambuc    static _LIBCPP_CONSTEXPR const bool is_signed = type(-1) < type(0);
2064684ddb6SLionel Sambuc    static _LIBCPP_CONSTEXPR const int  digits = static_cast<int>(sizeof(type) * __CHAR_BIT__ - is_signed);
2074684ddb6SLionel Sambuc    static _LIBCPP_CONSTEXPR const int  digits10 = digits * 3 / 10;
2084684ddb6SLionel Sambuc    static _LIBCPP_CONSTEXPR const int  max_digits10 = 0;
2094684ddb6SLionel Sambuc    static _LIBCPP_CONSTEXPR const type __min = __libcpp_compute_min<type, digits, is_signed>::value;
2104684ddb6SLionel Sambuc    static _LIBCPP_CONSTEXPR const type __max = is_signed ? type(type(~0) ^ __min) : type(~0);
2114684ddb6SLionel Sambuc    _LIBCPP_INLINE_VISIBILITY static _LIBCPP_CONSTEXPR type min() _NOEXCEPT {return __min;}
2124684ddb6SLionel Sambuc    _LIBCPP_INLINE_VISIBILITY static _LIBCPP_CONSTEXPR type max() _NOEXCEPT {return __max;}
2134684ddb6SLionel Sambuc    _LIBCPP_INLINE_VISIBILITY static _LIBCPP_CONSTEXPR type lowest() _NOEXCEPT {return min();}
2144684ddb6SLionel Sambuc
2154684ddb6SLionel Sambuc    static _LIBCPP_CONSTEXPR const bool is_integer = true;
2164684ddb6SLionel Sambuc    static _LIBCPP_CONSTEXPR const bool is_exact = true;
2174684ddb6SLionel Sambuc    static _LIBCPP_CONSTEXPR const int  radix = 2;
2184684ddb6SLionel Sambuc    _LIBCPP_INLINE_VISIBILITY static _LIBCPP_CONSTEXPR type epsilon() _NOEXCEPT {return type(0);}
2194684ddb6SLionel Sambuc    _LIBCPP_INLINE_VISIBILITY static _LIBCPP_CONSTEXPR type round_error() _NOEXCEPT {return type(0);}
2204684ddb6SLionel Sambuc
2214684ddb6SLionel Sambuc    static _LIBCPP_CONSTEXPR const int  min_exponent = 0;
2224684ddb6SLionel Sambuc    static _LIBCPP_CONSTEXPR const int  min_exponent10 = 0;
2234684ddb6SLionel Sambuc    static _LIBCPP_CONSTEXPR const int  max_exponent = 0;
2244684ddb6SLionel Sambuc    static _LIBCPP_CONSTEXPR const int  max_exponent10 = 0;
2254684ddb6SLionel Sambuc
2264684ddb6SLionel Sambuc    static _LIBCPP_CONSTEXPR const bool has_infinity = false;
2274684ddb6SLionel Sambuc    static _LIBCPP_CONSTEXPR const bool has_quiet_NaN = false;
2284684ddb6SLionel Sambuc    static _LIBCPP_CONSTEXPR const bool has_signaling_NaN = false;
2294684ddb6SLionel Sambuc    static _LIBCPP_CONSTEXPR const float_denorm_style has_denorm = denorm_absent;
2304684ddb6SLionel Sambuc    static _LIBCPP_CONSTEXPR const bool has_denorm_loss = false;
2314684ddb6SLionel Sambuc    _LIBCPP_INLINE_VISIBILITY static _LIBCPP_CONSTEXPR type infinity() _NOEXCEPT {return type(0);}
2324684ddb6SLionel Sambuc    _LIBCPP_INLINE_VISIBILITY static _LIBCPP_CONSTEXPR type quiet_NaN() _NOEXCEPT {return type(0);}
2334684ddb6SLionel Sambuc    _LIBCPP_INLINE_VISIBILITY static _LIBCPP_CONSTEXPR type signaling_NaN() _NOEXCEPT {return type(0);}
2344684ddb6SLionel Sambuc    _LIBCPP_INLINE_VISIBILITY static _LIBCPP_CONSTEXPR type denorm_min() _NOEXCEPT {return type(0);}
2354684ddb6SLionel Sambuc
2364684ddb6SLionel Sambuc    static _LIBCPP_CONSTEXPR const bool is_iec559 = false;
2374684ddb6SLionel Sambuc    static _LIBCPP_CONSTEXPR const bool is_bounded = true;
238*0a6a1f1dSLionel Sambuc    static _LIBCPP_CONSTEXPR const bool is_modulo = !_VSTD::is_signed<_Tp>::value;
2394684ddb6SLionel Sambuc
240*0a6a1f1dSLionel Sambuc#if defined(__i386__) || defined(__x86_64__) || defined(__pnacl__)
2414684ddb6SLionel Sambuc    static _LIBCPP_CONSTEXPR const bool traps = true;
2424684ddb6SLionel Sambuc#else
2434684ddb6SLionel Sambuc    static _LIBCPP_CONSTEXPR const bool traps = false;
2444684ddb6SLionel Sambuc#endif
2454684ddb6SLionel Sambuc    static _LIBCPP_CONSTEXPR const bool tinyness_before = false;
2464684ddb6SLionel Sambuc    static _LIBCPP_CONSTEXPR const float_round_style round_style = round_toward_zero;
2474684ddb6SLionel Sambuc};
2484684ddb6SLionel Sambuc
2494684ddb6SLionel Sambuctemplate <>
2504684ddb6SLionel Sambucclass __libcpp_numeric_limits<bool, true>
2514684ddb6SLionel Sambuc{
2524684ddb6SLionel Sambucprotected:
2534684ddb6SLionel Sambuc    typedef bool type;
2544684ddb6SLionel Sambuc
2554684ddb6SLionel Sambuc    static _LIBCPP_CONSTEXPR const bool is_specialized = true;
2564684ddb6SLionel Sambuc
2574684ddb6SLionel Sambuc    static _LIBCPP_CONSTEXPR const bool is_signed = false;
2584684ddb6SLionel Sambuc    static _LIBCPP_CONSTEXPR const int  digits = 1;
2594684ddb6SLionel Sambuc    static _LIBCPP_CONSTEXPR const int  digits10 = 0;
2604684ddb6SLionel Sambuc    static _LIBCPP_CONSTEXPR const int  max_digits10 = 0;
2614684ddb6SLionel Sambuc    static _LIBCPP_CONSTEXPR const type __min = false;
2624684ddb6SLionel Sambuc    static _LIBCPP_CONSTEXPR const type __max = true;
2634684ddb6SLionel Sambuc    _LIBCPP_INLINE_VISIBILITY static _LIBCPP_CONSTEXPR type min() _NOEXCEPT {return __min;}
2644684ddb6SLionel Sambuc    _LIBCPP_INLINE_VISIBILITY static _LIBCPP_CONSTEXPR type max() _NOEXCEPT {return __max;}
2654684ddb6SLionel Sambuc    _LIBCPP_INLINE_VISIBILITY static _LIBCPP_CONSTEXPR type lowest() _NOEXCEPT {return min();}
2664684ddb6SLionel Sambuc
2674684ddb6SLionel Sambuc    static _LIBCPP_CONSTEXPR const bool is_integer = true;
2684684ddb6SLionel Sambuc    static _LIBCPP_CONSTEXPR const bool is_exact = true;
2694684ddb6SLionel Sambuc    static _LIBCPP_CONSTEXPR const int  radix = 2;
2704684ddb6SLionel Sambuc    _LIBCPP_INLINE_VISIBILITY static _LIBCPP_CONSTEXPR type epsilon() _NOEXCEPT {return type(0);}
2714684ddb6SLionel Sambuc    _LIBCPP_INLINE_VISIBILITY static _LIBCPP_CONSTEXPR type round_error() _NOEXCEPT {return type(0);}
2724684ddb6SLionel Sambuc
2734684ddb6SLionel Sambuc    static _LIBCPP_CONSTEXPR const int  min_exponent = 0;
2744684ddb6SLionel Sambuc    static _LIBCPP_CONSTEXPR const int  min_exponent10 = 0;
2754684ddb6SLionel Sambuc    static _LIBCPP_CONSTEXPR const int  max_exponent = 0;
2764684ddb6SLionel Sambuc    static _LIBCPP_CONSTEXPR const int  max_exponent10 = 0;
2774684ddb6SLionel Sambuc
2784684ddb6SLionel Sambuc    static _LIBCPP_CONSTEXPR const bool has_infinity = false;
2794684ddb6SLionel Sambuc    static _LIBCPP_CONSTEXPR const bool has_quiet_NaN = false;
2804684ddb6SLionel Sambuc    static _LIBCPP_CONSTEXPR const bool has_signaling_NaN = false;
2814684ddb6SLionel Sambuc    static _LIBCPP_CONSTEXPR const float_denorm_style has_denorm = denorm_absent;
2824684ddb6SLionel Sambuc    static _LIBCPP_CONSTEXPR const bool has_denorm_loss = false;
2834684ddb6SLionel Sambuc    _LIBCPP_INLINE_VISIBILITY static _LIBCPP_CONSTEXPR type infinity() _NOEXCEPT {return type(0);}
2844684ddb6SLionel Sambuc    _LIBCPP_INLINE_VISIBILITY static _LIBCPP_CONSTEXPR type quiet_NaN() _NOEXCEPT {return type(0);}
2854684ddb6SLionel Sambuc    _LIBCPP_INLINE_VISIBILITY static _LIBCPP_CONSTEXPR type signaling_NaN() _NOEXCEPT {return type(0);}
2864684ddb6SLionel Sambuc    _LIBCPP_INLINE_VISIBILITY static _LIBCPP_CONSTEXPR type denorm_min() _NOEXCEPT {return type(0);}
2874684ddb6SLionel Sambuc
2884684ddb6SLionel Sambuc    static _LIBCPP_CONSTEXPR const bool is_iec559 = false;
2894684ddb6SLionel Sambuc    static _LIBCPP_CONSTEXPR const bool is_bounded = true;
2904684ddb6SLionel Sambuc    static _LIBCPP_CONSTEXPR const bool is_modulo = false;
2914684ddb6SLionel Sambuc
2924684ddb6SLionel Sambuc    static _LIBCPP_CONSTEXPR const bool traps = false;
2934684ddb6SLionel Sambuc    static _LIBCPP_CONSTEXPR const bool tinyness_before = false;
2944684ddb6SLionel Sambuc    static _LIBCPP_CONSTEXPR const float_round_style round_style = round_toward_zero;
2954684ddb6SLionel Sambuc};
2964684ddb6SLionel Sambuc
2974684ddb6SLionel Sambuctemplate <>
2984684ddb6SLionel Sambucclass __libcpp_numeric_limits<float, true>
2994684ddb6SLionel Sambuc{
3004684ddb6SLionel Sambucprotected:
3014684ddb6SLionel Sambuc    typedef float type;
3024684ddb6SLionel Sambuc
3034684ddb6SLionel Sambuc    static _LIBCPP_CONSTEXPR const bool is_specialized = true;
3044684ddb6SLionel Sambuc
3054684ddb6SLionel Sambuc    static _LIBCPP_CONSTEXPR const bool is_signed = true;
3064684ddb6SLionel Sambuc    static _LIBCPP_CONSTEXPR const int  digits = __FLT_MANT_DIG__;
3074684ddb6SLionel Sambuc    static _LIBCPP_CONSTEXPR const int  digits10 = __FLT_DIG__;
3084684ddb6SLionel Sambuc    static _LIBCPP_CONSTEXPR const int  max_digits10 = 2+(digits * 30103)/100000;
3094684ddb6SLionel Sambuc    _LIBCPP_INLINE_VISIBILITY static _LIBCPP_CONSTEXPR type min() _NOEXCEPT {return __FLT_MIN__;}
3104684ddb6SLionel Sambuc    _LIBCPP_INLINE_VISIBILITY static _LIBCPP_CONSTEXPR type max() _NOEXCEPT {return __FLT_MAX__;}
3114684ddb6SLionel Sambuc    _LIBCPP_INLINE_VISIBILITY static _LIBCPP_CONSTEXPR type lowest() _NOEXCEPT {return -max();}
3124684ddb6SLionel Sambuc
3134684ddb6SLionel Sambuc    static _LIBCPP_CONSTEXPR const bool is_integer = false;
3144684ddb6SLionel Sambuc    static _LIBCPP_CONSTEXPR const bool is_exact = false;
3154684ddb6SLionel Sambuc    static _LIBCPP_CONSTEXPR const int  radix = __FLT_RADIX__;
3164684ddb6SLionel Sambuc    _LIBCPP_INLINE_VISIBILITY static _LIBCPP_CONSTEXPR type epsilon() _NOEXCEPT {return __FLT_EPSILON__;}
3174684ddb6SLionel Sambuc    _LIBCPP_INLINE_VISIBILITY static _LIBCPP_CONSTEXPR type round_error() _NOEXCEPT {return 0.5F;}
3184684ddb6SLionel Sambuc
3194684ddb6SLionel Sambuc    static _LIBCPP_CONSTEXPR const int  min_exponent = __FLT_MIN_EXP__;
3204684ddb6SLionel Sambuc    static _LIBCPP_CONSTEXPR const int  min_exponent10 = __FLT_MIN_10_EXP__;
3214684ddb6SLionel Sambuc    static _LIBCPP_CONSTEXPR const int  max_exponent = __FLT_MAX_EXP__;
3224684ddb6SLionel Sambuc    static _LIBCPP_CONSTEXPR const int  max_exponent10 = __FLT_MAX_10_EXP__;
3234684ddb6SLionel Sambuc
3244684ddb6SLionel Sambuc    static _LIBCPP_CONSTEXPR const bool has_infinity = true;
3254684ddb6SLionel Sambuc    static _LIBCPP_CONSTEXPR const bool has_quiet_NaN = true;
3264684ddb6SLionel Sambuc    static _LIBCPP_CONSTEXPR const bool has_signaling_NaN = true;
3274684ddb6SLionel Sambuc    static _LIBCPP_CONSTEXPR const float_denorm_style has_denorm = denorm_present;
3284684ddb6SLionel Sambuc    static _LIBCPP_CONSTEXPR const bool has_denorm_loss = false;
3294684ddb6SLionel Sambuc    _LIBCPP_INLINE_VISIBILITY static _LIBCPP_CONSTEXPR type infinity() _NOEXCEPT {return __builtin_huge_valf();}
3304684ddb6SLionel Sambuc    _LIBCPP_INLINE_VISIBILITY static _LIBCPP_CONSTEXPR type quiet_NaN() _NOEXCEPT {return __builtin_nanf("");}
3314684ddb6SLionel Sambuc    _LIBCPP_INLINE_VISIBILITY static _LIBCPP_CONSTEXPR type signaling_NaN() _NOEXCEPT {return __builtin_nansf("");}
3324684ddb6SLionel Sambuc    _LIBCPP_INLINE_VISIBILITY static _LIBCPP_CONSTEXPR type denorm_min() _NOEXCEPT {return __FLT_DENORM_MIN__;}
3334684ddb6SLionel Sambuc
3344684ddb6SLionel Sambuc    static _LIBCPP_CONSTEXPR const bool is_iec559 = true;
3354684ddb6SLionel Sambuc    static _LIBCPP_CONSTEXPR const bool is_bounded = true;
3364684ddb6SLionel Sambuc    static _LIBCPP_CONSTEXPR const bool is_modulo = false;
3374684ddb6SLionel Sambuc
3384684ddb6SLionel Sambuc    static _LIBCPP_CONSTEXPR const bool traps = false;
3394684ddb6SLionel Sambuc    static _LIBCPP_CONSTEXPR const bool tinyness_before = false;
3404684ddb6SLionel Sambuc    static _LIBCPP_CONSTEXPR const float_round_style round_style = round_to_nearest;
3414684ddb6SLionel Sambuc};
3424684ddb6SLionel Sambuc
3434684ddb6SLionel Sambuctemplate <>
3444684ddb6SLionel Sambucclass __libcpp_numeric_limits<double, true>
3454684ddb6SLionel Sambuc{
3464684ddb6SLionel Sambucprotected:
3474684ddb6SLionel Sambuc    typedef double type;
3484684ddb6SLionel Sambuc
3494684ddb6SLionel Sambuc    static _LIBCPP_CONSTEXPR const bool is_specialized = true;
3504684ddb6SLionel Sambuc
3514684ddb6SLionel Sambuc    static _LIBCPP_CONSTEXPR const bool is_signed = true;
3524684ddb6SLionel Sambuc    static _LIBCPP_CONSTEXPR const int  digits = __DBL_MANT_DIG__;
3534684ddb6SLionel Sambuc    static _LIBCPP_CONSTEXPR const int  digits10 = __DBL_DIG__;
3544684ddb6SLionel Sambuc    static _LIBCPP_CONSTEXPR const int  max_digits10 = 2+(digits * 30103)/100000;
3554684ddb6SLionel Sambuc    _LIBCPP_INLINE_VISIBILITY static _LIBCPP_CONSTEXPR type min() _NOEXCEPT {return __DBL_MIN__;}
3564684ddb6SLionel Sambuc    _LIBCPP_INLINE_VISIBILITY static _LIBCPP_CONSTEXPR type max() _NOEXCEPT {return __DBL_MAX__;}
3574684ddb6SLionel Sambuc    _LIBCPP_INLINE_VISIBILITY static _LIBCPP_CONSTEXPR type lowest() _NOEXCEPT {return -max();}
3584684ddb6SLionel Sambuc
3594684ddb6SLionel Sambuc    static _LIBCPP_CONSTEXPR const bool is_integer = false;
3604684ddb6SLionel Sambuc    static _LIBCPP_CONSTEXPR const bool is_exact = false;
3614684ddb6SLionel Sambuc    static _LIBCPP_CONSTEXPR const int  radix = __FLT_RADIX__;
3624684ddb6SLionel Sambuc    _LIBCPP_INLINE_VISIBILITY static _LIBCPP_CONSTEXPR type epsilon() _NOEXCEPT {return __DBL_EPSILON__;}
3634684ddb6SLionel Sambuc    _LIBCPP_INLINE_VISIBILITY static _LIBCPP_CONSTEXPR type round_error() _NOEXCEPT {return 0.5;}
3644684ddb6SLionel Sambuc
3654684ddb6SLionel Sambuc    static _LIBCPP_CONSTEXPR const int  min_exponent = __DBL_MIN_EXP__;
3664684ddb6SLionel Sambuc    static _LIBCPP_CONSTEXPR const int  min_exponent10 = __DBL_MIN_10_EXP__;
3674684ddb6SLionel Sambuc    static _LIBCPP_CONSTEXPR const int  max_exponent = __DBL_MAX_EXP__;
3684684ddb6SLionel Sambuc    static _LIBCPP_CONSTEXPR const int  max_exponent10 = __DBL_MAX_10_EXP__;
3694684ddb6SLionel Sambuc
3704684ddb6SLionel Sambuc    static _LIBCPP_CONSTEXPR const bool has_infinity = true;
3714684ddb6SLionel Sambuc    static _LIBCPP_CONSTEXPR const bool has_quiet_NaN = true;
3724684ddb6SLionel Sambuc    static _LIBCPP_CONSTEXPR const bool has_signaling_NaN = true;
3734684ddb6SLionel Sambuc    static _LIBCPP_CONSTEXPR const float_denorm_style has_denorm = denorm_present;
3744684ddb6SLionel Sambuc    static _LIBCPP_CONSTEXPR const bool has_denorm_loss = false;
3754684ddb6SLionel Sambuc    _LIBCPP_INLINE_VISIBILITY static _LIBCPP_CONSTEXPR type infinity() _NOEXCEPT {return __builtin_huge_val();}
3764684ddb6SLionel Sambuc    _LIBCPP_INLINE_VISIBILITY static _LIBCPP_CONSTEXPR type quiet_NaN() _NOEXCEPT {return __builtin_nan("");}
3774684ddb6SLionel Sambuc    _LIBCPP_INLINE_VISIBILITY static _LIBCPP_CONSTEXPR type signaling_NaN() _NOEXCEPT {return __builtin_nans("");}
3784684ddb6SLionel Sambuc    _LIBCPP_INLINE_VISIBILITY static _LIBCPP_CONSTEXPR type denorm_min() _NOEXCEPT {return __DBL_DENORM_MIN__;}
3794684ddb6SLionel Sambuc
3804684ddb6SLionel Sambuc    static _LIBCPP_CONSTEXPR const bool is_iec559 = true;
3814684ddb6SLionel Sambuc    static _LIBCPP_CONSTEXPR const bool is_bounded = true;
3824684ddb6SLionel Sambuc    static _LIBCPP_CONSTEXPR const bool is_modulo = false;
3834684ddb6SLionel Sambuc
3844684ddb6SLionel Sambuc    static _LIBCPP_CONSTEXPR const bool traps = false;
3854684ddb6SLionel Sambuc    static _LIBCPP_CONSTEXPR const bool tinyness_before = false;
3864684ddb6SLionel Sambuc    static _LIBCPP_CONSTEXPR const float_round_style round_style = round_to_nearest;
3874684ddb6SLionel Sambuc};
3884684ddb6SLionel Sambuc
3894684ddb6SLionel Sambuctemplate <>
3904684ddb6SLionel Sambucclass __libcpp_numeric_limits<long double, true>
3914684ddb6SLionel Sambuc{
3924684ddb6SLionel Sambucprotected:
3934684ddb6SLionel Sambuc    typedef long double type;
3944684ddb6SLionel Sambuc
3954684ddb6SLionel Sambuc    static _LIBCPP_CONSTEXPR const bool is_specialized = true;
3964684ddb6SLionel Sambuc
3974684ddb6SLionel Sambuc    static _LIBCPP_CONSTEXPR const bool is_signed = true;
3984684ddb6SLionel Sambuc    static _LIBCPP_CONSTEXPR const int  digits = __LDBL_MANT_DIG__;
3994684ddb6SLionel Sambuc    static _LIBCPP_CONSTEXPR const int  digits10 = __LDBL_DIG__;
4004684ddb6SLionel Sambuc    static _LIBCPP_CONSTEXPR const int  max_digits10 = 2+(digits * 30103)/100000;
4014684ddb6SLionel Sambuc    _LIBCPP_INLINE_VISIBILITY static _LIBCPP_CONSTEXPR type min() _NOEXCEPT {return __LDBL_MIN__;}
4024684ddb6SLionel Sambuc    _LIBCPP_INLINE_VISIBILITY static _LIBCPP_CONSTEXPR type max() _NOEXCEPT {return __LDBL_MAX__;}
4034684ddb6SLionel Sambuc    _LIBCPP_INLINE_VISIBILITY static _LIBCPP_CONSTEXPR type lowest() _NOEXCEPT {return -max();}
4044684ddb6SLionel Sambuc
4054684ddb6SLionel Sambuc    static _LIBCPP_CONSTEXPR const bool is_integer = false;
4064684ddb6SLionel Sambuc    static _LIBCPP_CONSTEXPR const bool is_exact = false;
4074684ddb6SLionel Sambuc    static _LIBCPP_CONSTEXPR const int  radix = __FLT_RADIX__;
4084684ddb6SLionel Sambuc    _LIBCPP_INLINE_VISIBILITY static _LIBCPP_CONSTEXPR type epsilon() _NOEXCEPT {return __LDBL_EPSILON__;}
4094684ddb6SLionel Sambuc    _LIBCPP_INLINE_VISIBILITY static _LIBCPP_CONSTEXPR type round_error() _NOEXCEPT {return 0.5;}
4104684ddb6SLionel Sambuc
4114684ddb6SLionel Sambuc    static _LIBCPP_CONSTEXPR const int  min_exponent = __LDBL_MIN_EXP__;
4124684ddb6SLionel Sambuc    static _LIBCPP_CONSTEXPR const int  min_exponent10 = __LDBL_MIN_10_EXP__;
4134684ddb6SLionel Sambuc    static _LIBCPP_CONSTEXPR const int  max_exponent = __LDBL_MAX_EXP__;
4144684ddb6SLionel Sambuc    static _LIBCPP_CONSTEXPR const int  max_exponent10 = __LDBL_MAX_10_EXP__;
4154684ddb6SLionel Sambuc
4164684ddb6SLionel Sambuc    static _LIBCPP_CONSTEXPR const bool has_infinity = true;
4174684ddb6SLionel Sambuc    static _LIBCPP_CONSTEXPR const bool has_quiet_NaN = true;
4184684ddb6SLionel Sambuc    static _LIBCPP_CONSTEXPR const bool has_signaling_NaN = true;
4194684ddb6SLionel Sambuc    static _LIBCPP_CONSTEXPR const float_denorm_style has_denorm = denorm_present;
4204684ddb6SLionel Sambuc    static _LIBCPP_CONSTEXPR const bool has_denorm_loss = false;
4214684ddb6SLionel Sambuc    _LIBCPP_INLINE_VISIBILITY static _LIBCPP_CONSTEXPR type infinity() _NOEXCEPT {return __builtin_huge_vall();}
4224684ddb6SLionel Sambuc    _LIBCPP_INLINE_VISIBILITY static _LIBCPP_CONSTEXPR type quiet_NaN() _NOEXCEPT {return __builtin_nanl("");}
4234684ddb6SLionel Sambuc    _LIBCPP_INLINE_VISIBILITY static _LIBCPP_CONSTEXPR type signaling_NaN() _NOEXCEPT {return __builtin_nansl("");}
4244684ddb6SLionel Sambuc    _LIBCPP_INLINE_VISIBILITY static _LIBCPP_CONSTEXPR type denorm_min() _NOEXCEPT {return __LDBL_DENORM_MIN__;}
4254684ddb6SLionel Sambuc
4264684ddb6SLionel Sambuc#if (defined(__ppc__) || defined(__ppc64__))
4274684ddb6SLionel Sambuc    static _LIBCPP_CONSTEXPR const bool is_iec559 = false;
4284684ddb6SLionel Sambuc#else
4294684ddb6SLionel Sambuc    static _LIBCPP_CONSTEXPR const bool is_iec559 = true;
4304684ddb6SLionel Sambuc#endif
4314684ddb6SLionel Sambuc    static _LIBCPP_CONSTEXPR const bool is_bounded = true;
4324684ddb6SLionel Sambuc    static _LIBCPP_CONSTEXPR const bool is_modulo = false;
4334684ddb6SLionel Sambuc
4344684ddb6SLionel Sambuc    static _LIBCPP_CONSTEXPR const bool traps = false;
4354684ddb6SLionel Sambuc    static _LIBCPP_CONSTEXPR const bool tinyness_before = false;
4364684ddb6SLionel Sambuc    static _LIBCPP_CONSTEXPR const float_round_style round_style = round_to_nearest;
4374684ddb6SLionel Sambuc};
4384684ddb6SLionel Sambuc
4394684ddb6SLionel Sambuctemplate <class _Tp>
4404684ddb6SLionel Sambucclass _LIBCPP_TYPE_VIS_ONLY numeric_limits
4414684ddb6SLionel Sambuc    : private __libcpp_numeric_limits<typename remove_cv<_Tp>::type>
4424684ddb6SLionel Sambuc{
4434684ddb6SLionel Sambuc    typedef __libcpp_numeric_limits<typename remove_cv<_Tp>::type> __base;
4444684ddb6SLionel Sambuc    typedef typename __base::type type;
4454684ddb6SLionel Sambucpublic:
4464684ddb6SLionel Sambuc    static _LIBCPP_CONSTEXPR const bool is_specialized = __base::is_specialized;
4474684ddb6SLionel Sambuc    _LIBCPP_INLINE_VISIBILITY static _LIBCPP_CONSTEXPR type min() _NOEXCEPT {return __base::min();}
4484684ddb6SLionel Sambuc    _LIBCPP_INLINE_VISIBILITY static _LIBCPP_CONSTEXPR type max() _NOEXCEPT {return __base::max();}
4494684ddb6SLionel Sambuc    _LIBCPP_INLINE_VISIBILITY static _LIBCPP_CONSTEXPR type lowest() _NOEXCEPT {return __base::lowest();}
4504684ddb6SLionel Sambuc
4514684ddb6SLionel Sambuc    static _LIBCPP_CONSTEXPR const int  digits = __base::digits;
4524684ddb6SLionel Sambuc    static _LIBCPP_CONSTEXPR const int  digits10 = __base::digits10;
4534684ddb6SLionel Sambuc    static _LIBCPP_CONSTEXPR const int  max_digits10 = __base::max_digits10;
4544684ddb6SLionel Sambuc    static _LIBCPP_CONSTEXPR const bool is_signed = __base::is_signed;
4554684ddb6SLionel Sambuc    static _LIBCPP_CONSTEXPR const bool is_integer = __base::is_integer;
4564684ddb6SLionel Sambuc    static _LIBCPP_CONSTEXPR const bool is_exact = __base::is_exact;
4574684ddb6SLionel Sambuc    static _LIBCPP_CONSTEXPR const int  radix = __base::radix;
4584684ddb6SLionel Sambuc    _LIBCPP_INLINE_VISIBILITY static _LIBCPP_CONSTEXPR type epsilon() _NOEXCEPT {return __base::epsilon();}
4594684ddb6SLionel Sambuc    _LIBCPP_INLINE_VISIBILITY static _LIBCPP_CONSTEXPR type round_error() _NOEXCEPT {return __base::round_error();}
4604684ddb6SLionel Sambuc
4614684ddb6SLionel Sambuc    static _LIBCPP_CONSTEXPR const int  min_exponent = __base::min_exponent;
4624684ddb6SLionel Sambuc    static _LIBCPP_CONSTEXPR const int  min_exponent10 = __base::min_exponent10;
4634684ddb6SLionel Sambuc    static _LIBCPP_CONSTEXPR const int  max_exponent = __base::max_exponent;
4644684ddb6SLionel Sambuc    static _LIBCPP_CONSTEXPR const int  max_exponent10 = __base::max_exponent10;
4654684ddb6SLionel Sambuc
4664684ddb6SLionel Sambuc    static _LIBCPP_CONSTEXPR const bool has_infinity = __base::has_infinity;
4674684ddb6SLionel Sambuc    static _LIBCPP_CONSTEXPR const bool has_quiet_NaN = __base::has_quiet_NaN;
4684684ddb6SLionel Sambuc    static _LIBCPP_CONSTEXPR const bool has_signaling_NaN = __base::has_signaling_NaN;
4694684ddb6SLionel Sambuc    static _LIBCPP_CONSTEXPR const float_denorm_style has_denorm = __base::has_denorm;
4704684ddb6SLionel Sambuc    static _LIBCPP_CONSTEXPR const bool has_denorm_loss = __base::has_denorm_loss;
4714684ddb6SLionel Sambuc    _LIBCPP_INLINE_VISIBILITY static _LIBCPP_CONSTEXPR type infinity() _NOEXCEPT {return __base::infinity();}
4724684ddb6SLionel Sambuc    _LIBCPP_INLINE_VISIBILITY static _LIBCPP_CONSTEXPR type quiet_NaN() _NOEXCEPT {return __base::quiet_NaN();}
4734684ddb6SLionel Sambuc    _LIBCPP_INLINE_VISIBILITY static _LIBCPP_CONSTEXPR type signaling_NaN() _NOEXCEPT {return __base::signaling_NaN();}
4744684ddb6SLionel Sambuc    _LIBCPP_INLINE_VISIBILITY static _LIBCPP_CONSTEXPR type denorm_min() _NOEXCEPT {return __base::denorm_min();}
4754684ddb6SLionel Sambuc
4764684ddb6SLionel Sambuc    static _LIBCPP_CONSTEXPR const bool is_iec559 = __base::is_iec559;
4774684ddb6SLionel Sambuc    static _LIBCPP_CONSTEXPR const bool is_bounded = __base::is_bounded;
4784684ddb6SLionel Sambuc    static _LIBCPP_CONSTEXPR const bool is_modulo = __base::is_modulo;
4794684ddb6SLionel Sambuc
4804684ddb6SLionel Sambuc    static _LIBCPP_CONSTEXPR const bool traps = __base::traps;
4814684ddb6SLionel Sambuc    static _LIBCPP_CONSTEXPR const bool tinyness_before = __base::tinyness_before;
4824684ddb6SLionel Sambuc    static _LIBCPP_CONSTEXPR const float_round_style round_style = __base::round_style;
4834684ddb6SLionel Sambuc};
4844684ddb6SLionel Sambuc
4854684ddb6SLionel Sambuctemplate <class _Tp>
4864684ddb6SLionel Sambuc    _LIBCPP_CONSTEXPR const bool numeric_limits<_Tp>::is_specialized;
4874684ddb6SLionel Sambuctemplate <class _Tp>
4884684ddb6SLionel Sambuc    _LIBCPP_CONSTEXPR const int numeric_limits<_Tp>::digits;
4894684ddb6SLionel Sambuctemplate <class _Tp>
4904684ddb6SLionel Sambuc    _LIBCPP_CONSTEXPR const int numeric_limits<_Tp>::digits10;
4914684ddb6SLionel Sambuctemplate <class _Tp>
4924684ddb6SLionel Sambuc    _LIBCPP_CONSTEXPR const int numeric_limits<_Tp>::max_digits10;
4934684ddb6SLionel Sambuctemplate <class _Tp>
4944684ddb6SLionel Sambuc    _LIBCPP_CONSTEXPR const bool numeric_limits<_Tp>::is_signed;
4954684ddb6SLionel Sambuctemplate <class _Tp>
4964684ddb6SLionel Sambuc    _LIBCPP_CONSTEXPR const bool numeric_limits<_Tp>::is_integer;
4974684ddb6SLionel Sambuctemplate <class _Tp>
4984684ddb6SLionel Sambuc    _LIBCPP_CONSTEXPR const bool numeric_limits<_Tp>::is_exact;
4994684ddb6SLionel Sambuctemplate <class _Tp>
5004684ddb6SLionel Sambuc    _LIBCPP_CONSTEXPR const int numeric_limits<_Tp>::radix;
5014684ddb6SLionel Sambuctemplate <class _Tp>
5024684ddb6SLionel Sambuc    _LIBCPP_CONSTEXPR const int numeric_limits<_Tp>::min_exponent;
5034684ddb6SLionel Sambuctemplate <class _Tp>
5044684ddb6SLionel Sambuc    _LIBCPP_CONSTEXPR const int numeric_limits<_Tp>::min_exponent10;
5054684ddb6SLionel Sambuctemplate <class _Tp>
5064684ddb6SLionel Sambuc    _LIBCPP_CONSTEXPR const int numeric_limits<_Tp>::max_exponent;
5074684ddb6SLionel Sambuctemplate <class _Tp>
5084684ddb6SLionel Sambuc    _LIBCPP_CONSTEXPR const int numeric_limits<_Tp>::max_exponent10;
5094684ddb6SLionel Sambuctemplate <class _Tp>
5104684ddb6SLionel Sambuc    _LIBCPP_CONSTEXPR const bool numeric_limits<_Tp>::has_infinity;
5114684ddb6SLionel Sambuctemplate <class _Tp>
5124684ddb6SLionel Sambuc    _LIBCPP_CONSTEXPR const bool numeric_limits<_Tp>::has_quiet_NaN;
5134684ddb6SLionel Sambuctemplate <class _Tp>
5144684ddb6SLionel Sambuc    _LIBCPP_CONSTEXPR const bool numeric_limits<_Tp>::has_signaling_NaN;
5154684ddb6SLionel Sambuctemplate <class _Tp>
5164684ddb6SLionel Sambuc    _LIBCPP_CONSTEXPR const float_denorm_style numeric_limits<_Tp>::has_denorm;
5174684ddb6SLionel Sambuctemplate <class _Tp>
5184684ddb6SLionel Sambuc    _LIBCPP_CONSTEXPR const bool numeric_limits<_Tp>::has_denorm_loss;
5194684ddb6SLionel Sambuctemplate <class _Tp>
5204684ddb6SLionel Sambuc    _LIBCPP_CONSTEXPR const bool numeric_limits<_Tp>::is_iec559;
5214684ddb6SLionel Sambuctemplate <class _Tp>
5224684ddb6SLionel Sambuc    _LIBCPP_CONSTEXPR const bool numeric_limits<_Tp>::is_bounded;
5234684ddb6SLionel Sambuctemplate <class _Tp>
5244684ddb6SLionel Sambuc    _LIBCPP_CONSTEXPR const bool numeric_limits<_Tp>::is_modulo;
5254684ddb6SLionel Sambuctemplate <class _Tp>
5264684ddb6SLionel Sambuc    _LIBCPP_CONSTEXPR const bool numeric_limits<_Tp>::traps;
5274684ddb6SLionel Sambuctemplate <class _Tp>
5284684ddb6SLionel Sambuc    _LIBCPP_CONSTEXPR const bool numeric_limits<_Tp>::tinyness_before;
5294684ddb6SLionel Sambuctemplate <class _Tp>
5304684ddb6SLionel Sambuc    _LIBCPP_CONSTEXPR const float_round_style numeric_limits<_Tp>::round_style;
5314684ddb6SLionel Sambuc
5324684ddb6SLionel Sambuctemplate <class _Tp>
5334684ddb6SLionel Sambucclass _LIBCPP_TYPE_VIS_ONLY numeric_limits<const _Tp>
5344684ddb6SLionel Sambuc    : private numeric_limits<_Tp>
5354684ddb6SLionel Sambuc{
5364684ddb6SLionel Sambuc    typedef numeric_limits<_Tp> __base;
5374684ddb6SLionel Sambuc    typedef _Tp type;
5384684ddb6SLionel Sambucpublic:
5394684ddb6SLionel Sambuc    static _LIBCPP_CONSTEXPR const bool is_specialized = __base::is_specialized;
5404684ddb6SLionel Sambuc    _LIBCPP_INLINE_VISIBILITY static _LIBCPP_CONSTEXPR type min() _NOEXCEPT {return __base::min();}
5414684ddb6SLionel Sambuc    _LIBCPP_INLINE_VISIBILITY static _LIBCPP_CONSTEXPR type max() _NOEXCEPT {return __base::max();}
5424684ddb6SLionel Sambuc    _LIBCPP_INLINE_VISIBILITY static _LIBCPP_CONSTEXPR type lowest() _NOEXCEPT {return __base::lowest();}
5434684ddb6SLionel Sambuc
5444684ddb6SLionel Sambuc    static _LIBCPP_CONSTEXPR const int  digits = __base::digits;
5454684ddb6SLionel Sambuc    static _LIBCPP_CONSTEXPR const int  digits10 = __base::digits10;
5464684ddb6SLionel Sambuc    static _LIBCPP_CONSTEXPR const int  max_digits10 = __base::max_digits10;
5474684ddb6SLionel Sambuc    static _LIBCPP_CONSTEXPR const bool is_signed = __base::is_signed;
5484684ddb6SLionel Sambuc    static _LIBCPP_CONSTEXPR const bool is_integer = __base::is_integer;
5494684ddb6SLionel Sambuc    static _LIBCPP_CONSTEXPR const bool is_exact = __base::is_exact;
5504684ddb6SLionel Sambuc    static _LIBCPP_CONSTEXPR const int  radix = __base::radix;
5514684ddb6SLionel Sambuc    _LIBCPP_INLINE_VISIBILITY static _LIBCPP_CONSTEXPR type epsilon() _NOEXCEPT {return __base::epsilon();}
5524684ddb6SLionel Sambuc    _LIBCPP_INLINE_VISIBILITY static _LIBCPP_CONSTEXPR type round_error() _NOEXCEPT {return __base::round_error();}
5534684ddb6SLionel Sambuc
5544684ddb6SLionel Sambuc    static _LIBCPP_CONSTEXPR const int  min_exponent = __base::min_exponent;
5554684ddb6SLionel Sambuc    static _LIBCPP_CONSTEXPR const int  min_exponent10 = __base::min_exponent10;
5564684ddb6SLionel Sambuc    static _LIBCPP_CONSTEXPR const int  max_exponent = __base::max_exponent;
5574684ddb6SLionel Sambuc    static _LIBCPP_CONSTEXPR const int  max_exponent10 = __base::max_exponent10;
5584684ddb6SLionel Sambuc
5594684ddb6SLionel Sambuc    static _LIBCPP_CONSTEXPR const bool has_infinity = __base::has_infinity;
5604684ddb6SLionel Sambuc    static _LIBCPP_CONSTEXPR const bool has_quiet_NaN = __base::has_quiet_NaN;
5614684ddb6SLionel Sambuc    static _LIBCPP_CONSTEXPR const bool has_signaling_NaN = __base::has_signaling_NaN;
5624684ddb6SLionel Sambuc    static _LIBCPP_CONSTEXPR const float_denorm_style has_denorm = __base::has_denorm;
5634684ddb6SLionel Sambuc    static _LIBCPP_CONSTEXPR const bool has_denorm_loss = __base::has_denorm_loss;
5644684ddb6SLionel Sambuc    _LIBCPP_INLINE_VISIBILITY static _LIBCPP_CONSTEXPR type infinity() _NOEXCEPT {return __base::infinity();}
5654684ddb6SLionel Sambuc    _LIBCPP_INLINE_VISIBILITY static _LIBCPP_CONSTEXPR type quiet_NaN() _NOEXCEPT {return __base::quiet_NaN();}
5664684ddb6SLionel Sambuc    _LIBCPP_INLINE_VISIBILITY static _LIBCPP_CONSTEXPR type signaling_NaN() _NOEXCEPT {return __base::signaling_NaN();}
5674684ddb6SLionel Sambuc    _LIBCPP_INLINE_VISIBILITY static _LIBCPP_CONSTEXPR type denorm_min() _NOEXCEPT {return __base::denorm_min();}
5684684ddb6SLionel Sambuc
5694684ddb6SLionel Sambuc    static _LIBCPP_CONSTEXPR const bool is_iec559 = __base::is_iec559;
5704684ddb6SLionel Sambuc    static _LIBCPP_CONSTEXPR const bool is_bounded = __base::is_bounded;
5714684ddb6SLionel Sambuc    static _LIBCPP_CONSTEXPR const bool is_modulo = __base::is_modulo;
5724684ddb6SLionel Sambuc
5734684ddb6SLionel Sambuc    static _LIBCPP_CONSTEXPR const bool traps = __base::traps;
5744684ddb6SLionel Sambuc    static _LIBCPP_CONSTEXPR const bool tinyness_before = __base::tinyness_before;
5754684ddb6SLionel Sambuc    static _LIBCPP_CONSTEXPR const float_round_style round_style = __base::round_style;
5764684ddb6SLionel Sambuc};
5774684ddb6SLionel Sambuc
5784684ddb6SLionel Sambuctemplate <class _Tp>
5794684ddb6SLionel Sambuc    _LIBCPP_CONSTEXPR const bool numeric_limits<const _Tp>::is_specialized;
5804684ddb6SLionel Sambuctemplate <class _Tp>
5814684ddb6SLionel Sambuc    _LIBCPP_CONSTEXPR const int numeric_limits<const _Tp>::digits;
5824684ddb6SLionel Sambuctemplate <class _Tp>
5834684ddb6SLionel Sambuc    _LIBCPP_CONSTEXPR const int numeric_limits<const _Tp>::digits10;
5844684ddb6SLionel Sambuctemplate <class _Tp>
5854684ddb6SLionel Sambuc    _LIBCPP_CONSTEXPR const int numeric_limits<const _Tp>::max_digits10;
5864684ddb6SLionel Sambuctemplate <class _Tp>
5874684ddb6SLionel Sambuc    _LIBCPP_CONSTEXPR const bool numeric_limits<const _Tp>::is_signed;
5884684ddb6SLionel Sambuctemplate <class _Tp>
5894684ddb6SLionel Sambuc    _LIBCPP_CONSTEXPR const bool numeric_limits<const _Tp>::is_integer;
5904684ddb6SLionel Sambuctemplate <class _Tp>
5914684ddb6SLionel Sambuc    _LIBCPP_CONSTEXPR const bool numeric_limits<const _Tp>::is_exact;
5924684ddb6SLionel Sambuctemplate <class _Tp>
5934684ddb6SLionel Sambuc    _LIBCPP_CONSTEXPR const int numeric_limits<const _Tp>::radix;
5944684ddb6SLionel Sambuctemplate <class _Tp>
5954684ddb6SLionel Sambuc    _LIBCPP_CONSTEXPR const int numeric_limits<const _Tp>::min_exponent;
5964684ddb6SLionel Sambuctemplate <class _Tp>
5974684ddb6SLionel Sambuc    _LIBCPP_CONSTEXPR const int numeric_limits<const _Tp>::min_exponent10;
5984684ddb6SLionel Sambuctemplate <class _Tp>
5994684ddb6SLionel Sambuc    _LIBCPP_CONSTEXPR const int numeric_limits<const _Tp>::max_exponent;
6004684ddb6SLionel Sambuctemplate <class _Tp>
6014684ddb6SLionel Sambuc    _LIBCPP_CONSTEXPR const int numeric_limits<const _Tp>::max_exponent10;
6024684ddb6SLionel Sambuctemplate <class _Tp>
6034684ddb6SLionel Sambuc    _LIBCPP_CONSTEXPR const bool numeric_limits<const _Tp>::has_infinity;
6044684ddb6SLionel Sambuctemplate <class _Tp>
6054684ddb6SLionel Sambuc    _LIBCPP_CONSTEXPR const bool numeric_limits<const _Tp>::has_quiet_NaN;
6064684ddb6SLionel Sambuctemplate <class _Tp>
6074684ddb6SLionel Sambuc    _LIBCPP_CONSTEXPR const bool numeric_limits<const _Tp>::has_signaling_NaN;
6084684ddb6SLionel Sambuctemplate <class _Tp>
6094684ddb6SLionel Sambuc    _LIBCPP_CONSTEXPR const float_denorm_style numeric_limits<const _Tp>::has_denorm;
6104684ddb6SLionel Sambuctemplate <class _Tp>
6114684ddb6SLionel Sambuc    _LIBCPP_CONSTEXPR const bool numeric_limits<const _Tp>::has_denorm_loss;
6124684ddb6SLionel Sambuctemplate <class _Tp>
6134684ddb6SLionel Sambuc    _LIBCPP_CONSTEXPR const bool numeric_limits<const _Tp>::is_iec559;
6144684ddb6SLionel Sambuctemplate <class _Tp>
6154684ddb6SLionel Sambuc    _LIBCPP_CONSTEXPR const bool numeric_limits<const _Tp>::is_bounded;
6164684ddb6SLionel Sambuctemplate <class _Tp>
6174684ddb6SLionel Sambuc    _LIBCPP_CONSTEXPR const bool numeric_limits<const _Tp>::is_modulo;
6184684ddb6SLionel Sambuctemplate <class _Tp>
6194684ddb6SLionel Sambuc    _LIBCPP_CONSTEXPR const bool numeric_limits<const _Tp>::traps;
6204684ddb6SLionel Sambuctemplate <class _Tp>
6214684ddb6SLionel Sambuc    _LIBCPP_CONSTEXPR const bool numeric_limits<const _Tp>::tinyness_before;
6224684ddb6SLionel Sambuctemplate <class _Tp>
6234684ddb6SLionel Sambuc    _LIBCPP_CONSTEXPR const float_round_style numeric_limits<const _Tp>::round_style;
6244684ddb6SLionel Sambuc
6254684ddb6SLionel Sambuctemplate <class _Tp>
6264684ddb6SLionel Sambucclass _LIBCPP_TYPE_VIS_ONLY numeric_limits<volatile _Tp>
6274684ddb6SLionel Sambuc    : private numeric_limits<_Tp>
6284684ddb6SLionel Sambuc{
6294684ddb6SLionel Sambuc    typedef numeric_limits<_Tp> __base;
6304684ddb6SLionel Sambuc    typedef _Tp type;
6314684ddb6SLionel Sambucpublic:
6324684ddb6SLionel Sambuc    static _LIBCPP_CONSTEXPR const bool is_specialized = __base::is_specialized;
6334684ddb6SLionel Sambuc    _LIBCPP_INLINE_VISIBILITY static _LIBCPP_CONSTEXPR type min() _NOEXCEPT {return __base::min();}
6344684ddb6SLionel Sambuc    _LIBCPP_INLINE_VISIBILITY static _LIBCPP_CONSTEXPR type max() _NOEXCEPT {return __base::max();}
6354684ddb6SLionel Sambuc    _LIBCPP_INLINE_VISIBILITY static _LIBCPP_CONSTEXPR type lowest() _NOEXCEPT {return __base::lowest();}
6364684ddb6SLionel Sambuc
6374684ddb6SLionel Sambuc    static _LIBCPP_CONSTEXPR const int  digits = __base::digits;
6384684ddb6SLionel Sambuc    static _LIBCPP_CONSTEXPR const int  digits10 = __base::digits10;
6394684ddb6SLionel Sambuc    static _LIBCPP_CONSTEXPR const int  max_digits10 = __base::max_digits10;
6404684ddb6SLionel Sambuc    static _LIBCPP_CONSTEXPR const bool is_signed = __base::is_signed;
6414684ddb6SLionel Sambuc    static _LIBCPP_CONSTEXPR const bool is_integer = __base::is_integer;
6424684ddb6SLionel Sambuc    static _LIBCPP_CONSTEXPR const bool is_exact = __base::is_exact;
6434684ddb6SLionel Sambuc    static _LIBCPP_CONSTEXPR const int  radix = __base::radix;
6444684ddb6SLionel Sambuc    _LIBCPP_INLINE_VISIBILITY static _LIBCPP_CONSTEXPR type epsilon() _NOEXCEPT {return __base::epsilon();}
6454684ddb6SLionel Sambuc    _LIBCPP_INLINE_VISIBILITY static _LIBCPP_CONSTEXPR type round_error() _NOEXCEPT {return __base::round_error();}
6464684ddb6SLionel Sambuc
6474684ddb6SLionel Sambuc    static _LIBCPP_CONSTEXPR const int  min_exponent = __base::min_exponent;
6484684ddb6SLionel Sambuc    static _LIBCPP_CONSTEXPR const int  min_exponent10 = __base::min_exponent10;
6494684ddb6SLionel Sambuc    static _LIBCPP_CONSTEXPR const int  max_exponent = __base::max_exponent;
6504684ddb6SLionel Sambuc    static _LIBCPP_CONSTEXPR const int  max_exponent10 = __base::max_exponent10;
6514684ddb6SLionel Sambuc
6524684ddb6SLionel Sambuc    static _LIBCPP_CONSTEXPR const bool has_infinity = __base::has_infinity;
6534684ddb6SLionel Sambuc    static _LIBCPP_CONSTEXPR const bool has_quiet_NaN = __base::has_quiet_NaN;
6544684ddb6SLionel Sambuc    static _LIBCPP_CONSTEXPR const bool has_signaling_NaN = __base::has_signaling_NaN;
6554684ddb6SLionel Sambuc    static _LIBCPP_CONSTEXPR const float_denorm_style has_denorm = __base::has_denorm;
6564684ddb6SLionel Sambuc    static _LIBCPP_CONSTEXPR const bool has_denorm_loss = __base::has_denorm_loss;
6574684ddb6SLionel Sambuc    _LIBCPP_INLINE_VISIBILITY static _LIBCPP_CONSTEXPR type infinity() _NOEXCEPT {return __base::infinity();}
6584684ddb6SLionel Sambuc    _LIBCPP_INLINE_VISIBILITY static _LIBCPP_CONSTEXPR type quiet_NaN() _NOEXCEPT {return __base::quiet_NaN();}
6594684ddb6SLionel Sambuc    _LIBCPP_INLINE_VISIBILITY static _LIBCPP_CONSTEXPR type signaling_NaN() _NOEXCEPT {return __base::signaling_NaN();}
6604684ddb6SLionel Sambuc    _LIBCPP_INLINE_VISIBILITY static _LIBCPP_CONSTEXPR type denorm_min() _NOEXCEPT {return __base::denorm_min();}
6614684ddb6SLionel Sambuc
6624684ddb6SLionel Sambuc    static _LIBCPP_CONSTEXPR const bool is_iec559 = __base::is_iec559;
6634684ddb6SLionel Sambuc    static _LIBCPP_CONSTEXPR const bool is_bounded = __base::is_bounded;
6644684ddb6SLionel Sambuc    static _LIBCPP_CONSTEXPR const bool is_modulo = __base::is_modulo;
6654684ddb6SLionel Sambuc
6664684ddb6SLionel Sambuc    static _LIBCPP_CONSTEXPR const bool traps = __base::traps;
6674684ddb6SLionel Sambuc    static _LIBCPP_CONSTEXPR const bool tinyness_before = __base::tinyness_before;
6684684ddb6SLionel Sambuc    static _LIBCPP_CONSTEXPR const float_round_style round_style = __base::round_style;
6694684ddb6SLionel Sambuc};
6704684ddb6SLionel Sambuc
6714684ddb6SLionel Sambuctemplate <class _Tp>
6724684ddb6SLionel Sambuc    _LIBCPP_CONSTEXPR const bool numeric_limits<volatile _Tp>::is_specialized;
6734684ddb6SLionel Sambuctemplate <class _Tp>
6744684ddb6SLionel Sambuc    _LIBCPP_CONSTEXPR const int numeric_limits<volatile _Tp>::digits;
6754684ddb6SLionel Sambuctemplate <class _Tp>
6764684ddb6SLionel Sambuc    _LIBCPP_CONSTEXPR const int numeric_limits<volatile _Tp>::digits10;
6774684ddb6SLionel Sambuctemplate <class _Tp>
6784684ddb6SLionel Sambuc    _LIBCPP_CONSTEXPR const int numeric_limits<volatile _Tp>::max_digits10;
6794684ddb6SLionel Sambuctemplate <class _Tp>
6804684ddb6SLionel Sambuc    _LIBCPP_CONSTEXPR const bool numeric_limits<volatile _Tp>::is_signed;
6814684ddb6SLionel Sambuctemplate <class _Tp>
6824684ddb6SLionel Sambuc    _LIBCPP_CONSTEXPR const bool numeric_limits<volatile _Tp>::is_integer;
6834684ddb6SLionel Sambuctemplate <class _Tp>
6844684ddb6SLionel Sambuc    _LIBCPP_CONSTEXPR const bool numeric_limits<volatile _Tp>::is_exact;
6854684ddb6SLionel Sambuctemplate <class _Tp>
6864684ddb6SLionel Sambuc    _LIBCPP_CONSTEXPR const int numeric_limits<volatile _Tp>::radix;
6874684ddb6SLionel Sambuctemplate <class _Tp>
6884684ddb6SLionel Sambuc    _LIBCPP_CONSTEXPR const int numeric_limits<volatile _Tp>::min_exponent;
6894684ddb6SLionel Sambuctemplate <class _Tp>
6904684ddb6SLionel Sambuc    _LIBCPP_CONSTEXPR const int numeric_limits<volatile _Tp>::min_exponent10;
6914684ddb6SLionel Sambuctemplate <class _Tp>
6924684ddb6SLionel Sambuc    _LIBCPP_CONSTEXPR const int numeric_limits<volatile _Tp>::max_exponent;
6934684ddb6SLionel Sambuctemplate <class _Tp>
6944684ddb6SLionel Sambuc    _LIBCPP_CONSTEXPR const int numeric_limits<volatile _Tp>::max_exponent10;
6954684ddb6SLionel Sambuctemplate <class _Tp>
6964684ddb6SLionel Sambuc    _LIBCPP_CONSTEXPR const bool numeric_limits<volatile _Tp>::has_infinity;
6974684ddb6SLionel Sambuctemplate <class _Tp>
6984684ddb6SLionel Sambuc    _LIBCPP_CONSTEXPR const bool numeric_limits<volatile _Tp>::has_quiet_NaN;
6994684ddb6SLionel Sambuctemplate <class _Tp>
7004684ddb6SLionel Sambuc    _LIBCPP_CONSTEXPR const bool numeric_limits<volatile _Tp>::has_signaling_NaN;
7014684ddb6SLionel Sambuctemplate <class _Tp>
7024684ddb6SLionel Sambuc    _LIBCPP_CONSTEXPR const float_denorm_style numeric_limits<volatile _Tp>::has_denorm;
7034684ddb6SLionel Sambuctemplate <class _Tp>
7044684ddb6SLionel Sambuc    _LIBCPP_CONSTEXPR const bool numeric_limits<volatile _Tp>::has_denorm_loss;
7054684ddb6SLionel Sambuctemplate <class _Tp>
7064684ddb6SLionel Sambuc    _LIBCPP_CONSTEXPR const bool numeric_limits<volatile _Tp>::is_iec559;
7074684ddb6SLionel Sambuctemplate <class _Tp>
7084684ddb6SLionel Sambuc    _LIBCPP_CONSTEXPR const bool numeric_limits<volatile _Tp>::is_bounded;
7094684ddb6SLionel Sambuctemplate <class _Tp>
7104684ddb6SLionel Sambuc    _LIBCPP_CONSTEXPR const bool numeric_limits<volatile _Tp>::is_modulo;
7114684ddb6SLionel Sambuctemplate <class _Tp>
7124684ddb6SLionel Sambuc    _LIBCPP_CONSTEXPR const bool numeric_limits<volatile _Tp>::traps;
7134684ddb6SLionel Sambuctemplate <class _Tp>
7144684ddb6SLionel Sambuc    _LIBCPP_CONSTEXPR const bool numeric_limits<volatile _Tp>::tinyness_before;
7154684ddb6SLionel Sambuctemplate <class _Tp>
7164684ddb6SLionel Sambuc    _LIBCPP_CONSTEXPR const float_round_style numeric_limits<volatile _Tp>::round_style;
7174684ddb6SLionel Sambuc
7184684ddb6SLionel Sambuctemplate <class _Tp>
7194684ddb6SLionel Sambucclass _LIBCPP_TYPE_VIS_ONLY numeric_limits<const volatile _Tp>
7204684ddb6SLionel Sambuc    : private numeric_limits<_Tp>
7214684ddb6SLionel Sambuc{
7224684ddb6SLionel Sambuc    typedef numeric_limits<_Tp> __base;
7234684ddb6SLionel Sambuc    typedef _Tp type;
7244684ddb6SLionel Sambucpublic:
7254684ddb6SLionel Sambuc    static _LIBCPP_CONSTEXPR const bool is_specialized = __base::is_specialized;
7264684ddb6SLionel Sambuc    _LIBCPP_INLINE_VISIBILITY static _LIBCPP_CONSTEXPR type min() _NOEXCEPT {return __base::min();}
7274684ddb6SLionel Sambuc    _LIBCPP_INLINE_VISIBILITY static _LIBCPP_CONSTEXPR type max() _NOEXCEPT {return __base::max();}
7284684ddb6SLionel Sambuc    _LIBCPP_INLINE_VISIBILITY static _LIBCPP_CONSTEXPR type lowest() _NOEXCEPT {return __base::lowest();}
7294684ddb6SLionel Sambuc
7304684ddb6SLionel Sambuc    static _LIBCPP_CONSTEXPR const int  digits = __base::digits;
7314684ddb6SLionel Sambuc    static _LIBCPP_CONSTEXPR const int  digits10 = __base::digits10;
7324684ddb6SLionel Sambuc    static _LIBCPP_CONSTEXPR const int  max_digits10 = __base::max_digits10;
7334684ddb6SLionel Sambuc    static _LIBCPP_CONSTEXPR const bool is_signed = __base::is_signed;
7344684ddb6SLionel Sambuc    static _LIBCPP_CONSTEXPR const bool is_integer = __base::is_integer;
7354684ddb6SLionel Sambuc    static _LIBCPP_CONSTEXPR const bool is_exact = __base::is_exact;
7364684ddb6SLionel Sambuc    static _LIBCPP_CONSTEXPR const int  radix = __base::radix;
7374684ddb6SLionel Sambuc    _LIBCPP_INLINE_VISIBILITY static _LIBCPP_CONSTEXPR type epsilon() _NOEXCEPT {return __base::epsilon();}
7384684ddb6SLionel Sambuc    _LIBCPP_INLINE_VISIBILITY static _LIBCPP_CONSTEXPR type round_error() _NOEXCEPT {return __base::round_error();}
7394684ddb6SLionel Sambuc
7404684ddb6SLionel Sambuc    static _LIBCPP_CONSTEXPR const int  min_exponent = __base::min_exponent;
7414684ddb6SLionel Sambuc    static _LIBCPP_CONSTEXPR const int  min_exponent10 = __base::min_exponent10;
7424684ddb6SLionel Sambuc    static _LIBCPP_CONSTEXPR const int  max_exponent = __base::max_exponent;
7434684ddb6SLionel Sambuc    static _LIBCPP_CONSTEXPR const int  max_exponent10 = __base::max_exponent10;
7444684ddb6SLionel Sambuc
7454684ddb6SLionel Sambuc    static _LIBCPP_CONSTEXPR const bool has_infinity = __base::has_infinity;
7464684ddb6SLionel Sambuc    static _LIBCPP_CONSTEXPR const bool has_quiet_NaN = __base::has_quiet_NaN;
7474684ddb6SLionel Sambuc    static _LIBCPP_CONSTEXPR const bool has_signaling_NaN = __base::has_signaling_NaN;
7484684ddb6SLionel Sambuc    static _LIBCPP_CONSTEXPR const float_denorm_style has_denorm = __base::has_denorm;
7494684ddb6SLionel Sambuc    static _LIBCPP_CONSTEXPR const bool has_denorm_loss = __base::has_denorm_loss;
7504684ddb6SLionel Sambuc    _LIBCPP_INLINE_VISIBILITY static _LIBCPP_CONSTEXPR type infinity() _NOEXCEPT {return __base::infinity();}
7514684ddb6SLionel Sambuc    _LIBCPP_INLINE_VISIBILITY static _LIBCPP_CONSTEXPR type quiet_NaN() _NOEXCEPT {return __base::quiet_NaN();}
7524684ddb6SLionel Sambuc    _LIBCPP_INLINE_VISIBILITY static _LIBCPP_CONSTEXPR type signaling_NaN() _NOEXCEPT {return __base::signaling_NaN();}
7534684ddb6SLionel Sambuc    _LIBCPP_INLINE_VISIBILITY static _LIBCPP_CONSTEXPR type denorm_min() _NOEXCEPT {return __base::denorm_min();}
7544684ddb6SLionel Sambuc
7554684ddb6SLionel Sambuc    static _LIBCPP_CONSTEXPR const bool is_iec559 = __base::is_iec559;
7564684ddb6SLionel Sambuc    static _LIBCPP_CONSTEXPR const bool is_bounded = __base::is_bounded;
7574684ddb6SLionel Sambuc    static _LIBCPP_CONSTEXPR const bool is_modulo = __base::is_modulo;
7584684ddb6SLionel Sambuc
7594684ddb6SLionel Sambuc    static _LIBCPP_CONSTEXPR const bool traps = __base::traps;
7604684ddb6SLionel Sambuc    static _LIBCPP_CONSTEXPR const bool tinyness_before = __base::tinyness_before;
7614684ddb6SLionel Sambuc    static _LIBCPP_CONSTEXPR const float_round_style round_style = __base::round_style;
7624684ddb6SLionel Sambuc};
7634684ddb6SLionel Sambuc
7644684ddb6SLionel Sambuctemplate <class _Tp>
7654684ddb6SLionel Sambuc    _LIBCPP_CONSTEXPR const bool numeric_limits<const volatile _Tp>::is_specialized;
7664684ddb6SLionel Sambuctemplate <class _Tp>
7674684ddb6SLionel Sambuc    _LIBCPP_CONSTEXPR const int numeric_limits<const volatile _Tp>::digits;
7684684ddb6SLionel Sambuctemplate <class _Tp>
7694684ddb6SLionel Sambuc    _LIBCPP_CONSTEXPR const int numeric_limits<const volatile _Tp>::digits10;
7704684ddb6SLionel Sambuctemplate <class _Tp>
771*0a6a1f1dSLionel Sambuc    _LIBCPP_CONSTEXPR const int numeric_limits<const volatile _Tp>::max_digits10;
7724684ddb6SLionel Sambuctemplate <class _Tp>
7734684ddb6SLionel Sambuc    _LIBCPP_CONSTEXPR const bool numeric_limits<const volatile _Tp>::is_signed;
7744684ddb6SLionel Sambuctemplate <class _Tp>
7754684ddb6SLionel Sambuc    _LIBCPP_CONSTEXPR const bool numeric_limits<const volatile _Tp>::is_integer;
7764684ddb6SLionel Sambuctemplate <class _Tp>
7774684ddb6SLionel Sambuc    _LIBCPP_CONSTEXPR const bool numeric_limits<const volatile _Tp>::is_exact;
7784684ddb6SLionel Sambuctemplate <class _Tp>
7794684ddb6SLionel Sambuc    _LIBCPP_CONSTEXPR const int numeric_limits<const volatile _Tp>::radix;
7804684ddb6SLionel Sambuctemplate <class _Tp>
7814684ddb6SLionel Sambuc    _LIBCPP_CONSTEXPR const int numeric_limits<const volatile _Tp>::min_exponent;
7824684ddb6SLionel Sambuctemplate <class _Tp>
7834684ddb6SLionel Sambuc    _LIBCPP_CONSTEXPR const int numeric_limits<const volatile _Tp>::min_exponent10;
7844684ddb6SLionel Sambuctemplate <class _Tp>
7854684ddb6SLionel Sambuc    _LIBCPP_CONSTEXPR const int numeric_limits<const volatile _Tp>::max_exponent;
7864684ddb6SLionel Sambuctemplate <class _Tp>
7874684ddb6SLionel Sambuc    _LIBCPP_CONSTEXPR const int numeric_limits<const volatile _Tp>::max_exponent10;
7884684ddb6SLionel Sambuctemplate <class _Tp>
7894684ddb6SLionel Sambuc    _LIBCPP_CONSTEXPR const bool numeric_limits<const volatile _Tp>::has_infinity;
7904684ddb6SLionel Sambuctemplate <class _Tp>
7914684ddb6SLionel Sambuc    _LIBCPP_CONSTEXPR const bool numeric_limits<const volatile _Tp>::has_quiet_NaN;
7924684ddb6SLionel Sambuctemplate <class _Tp>
7934684ddb6SLionel Sambuc    _LIBCPP_CONSTEXPR const bool numeric_limits<const volatile _Tp>::has_signaling_NaN;
7944684ddb6SLionel Sambuctemplate <class _Tp>
7954684ddb6SLionel Sambuc    _LIBCPP_CONSTEXPR const float_denorm_style numeric_limits<const volatile _Tp>::has_denorm;
7964684ddb6SLionel Sambuctemplate <class _Tp>
7974684ddb6SLionel Sambuc    _LIBCPP_CONSTEXPR const bool numeric_limits<const volatile _Tp>::has_denorm_loss;
7984684ddb6SLionel Sambuctemplate <class _Tp>
7994684ddb6SLionel Sambuc    _LIBCPP_CONSTEXPR const bool numeric_limits<const volatile _Tp>::is_iec559;
8004684ddb6SLionel Sambuctemplate <class _Tp>
8014684ddb6SLionel Sambuc    _LIBCPP_CONSTEXPR const bool numeric_limits<const volatile _Tp>::is_bounded;
8024684ddb6SLionel Sambuctemplate <class _Tp>
8034684ddb6SLionel Sambuc    _LIBCPP_CONSTEXPR const bool numeric_limits<const volatile _Tp>::is_modulo;
8044684ddb6SLionel Sambuctemplate <class _Tp>
8054684ddb6SLionel Sambuc    _LIBCPP_CONSTEXPR const bool numeric_limits<const volatile _Tp>::traps;
8064684ddb6SLionel Sambuctemplate <class _Tp>
8074684ddb6SLionel Sambuc    _LIBCPP_CONSTEXPR const bool numeric_limits<const volatile _Tp>::tinyness_before;
8084684ddb6SLionel Sambuctemplate <class _Tp>
8094684ddb6SLionel Sambuc    _LIBCPP_CONSTEXPR const float_round_style numeric_limits<const volatile _Tp>::round_style;
8104684ddb6SLionel Sambuc
8114684ddb6SLionel Sambuc_LIBCPP_END_NAMESPACE_STD
8124684ddb6SLionel Sambuc
8134684ddb6SLionel Sambuc#endif  // _LIBCPP_LIMITS
814