xref: /netbsd-src/external/gpl3/gcc.old/dist/libstdc++-v3/include/std/limits (revision 8feb0f0b7eaff0608f8350bbfa3098827b4bb91b)
11debfc3dSmrg// The template and inlines for the numeric_limits classes. -*- C++ -*-
21debfc3dSmrg
3*8feb0f0bSmrg// Copyright (C) 1999-2020 Free Software Foundation, Inc.
41debfc3dSmrg//
51debfc3dSmrg// This file is part of the GNU ISO C++ Library.  This library is free
61debfc3dSmrg// software; you can redistribute it and/or modify it under the
71debfc3dSmrg// terms of the GNU General Public License as published by the
81debfc3dSmrg// Free Software Foundation; either version 3, or (at your option)
91debfc3dSmrg// any later version.
101debfc3dSmrg
111debfc3dSmrg// This library is distributed in the hope that it will be useful,
121debfc3dSmrg// but WITHOUT ANY WARRANTY; without even the implied warranty of
131debfc3dSmrg// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
141debfc3dSmrg// GNU General Public License for more details.
151debfc3dSmrg
161debfc3dSmrg// Under Section 7 of GPL version 3, you are granted additional
171debfc3dSmrg// permissions described in the GCC Runtime Library Exception, version
181debfc3dSmrg// 3.1, as published by the Free Software Foundation.
191debfc3dSmrg
201debfc3dSmrg// You should have received a copy of the GNU General Public License and
211debfc3dSmrg// a copy of the GCC Runtime Library Exception along with this program;
221debfc3dSmrg// see the files COPYING3 and COPYING.RUNTIME respectively.  If not, see
231debfc3dSmrg// <http://www.gnu.org/licenses/>.
241debfc3dSmrg
251debfc3dSmrg/** @file include/limits
261debfc3dSmrg *  This is a Standard C++ Library header.
271debfc3dSmrg */
281debfc3dSmrg
291debfc3dSmrg// Note: this is not a conforming implementation.
301debfc3dSmrg// Written by Gabriel Dos Reis <gdr@codesourcery.com>
311debfc3dSmrg
321debfc3dSmrg//
331debfc3dSmrg// ISO 14882:1998
341debfc3dSmrg// 18.2.1
351debfc3dSmrg//
361debfc3dSmrg
371debfc3dSmrg#ifndef _GLIBCXX_NUMERIC_LIMITS
381debfc3dSmrg#define _GLIBCXX_NUMERIC_LIMITS 1
391debfc3dSmrg
401debfc3dSmrg#pragma GCC system_header
411debfc3dSmrg
421debfc3dSmrg#include <bits/c++config.h>
431debfc3dSmrg
441debfc3dSmrg//
451debfc3dSmrg// The numeric_limits<> traits document implementation-defined aspects
461debfc3dSmrg// of fundamental arithmetic data types (integers and floating points).
471debfc3dSmrg// From Standard C++ point of view, there are 14 such types:
481debfc3dSmrg//   * integers
491debfc3dSmrg//         bool							(1)
501debfc3dSmrg//         char, signed char, unsigned char, wchar_t            (4)
511debfc3dSmrg//         short, unsigned short				(2)
521debfc3dSmrg//         int, unsigned					(2)
531debfc3dSmrg//         long, unsigned long					(2)
541debfc3dSmrg//
551debfc3dSmrg//   * floating points
561debfc3dSmrg//         float						(1)
571debfc3dSmrg//         double						(1)
581debfc3dSmrg//         long double						(1)
591debfc3dSmrg//
601debfc3dSmrg// GNU C++ understands (where supported by the host C-library)
611debfc3dSmrg//   * integer
621debfc3dSmrg//         long long, unsigned long long			(2)
631debfc3dSmrg//
641debfc3dSmrg// which brings us to 16 fundamental arithmetic data types in GNU C++.
651debfc3dSmrg//
661debfc3dSmrg//
671debfc3dSmrg// Since a numeric_limits<> is a bit tricky to get right, we rely on
681debfc3dSmrg// an interface composed of macros which should be defined in config/os
691debfc3dSmrg// or config/cpu when they differ from the generic (read arbitrary)
701debfc3dSmrg// definitions given here.
711debfc3dSmrg//
721debfc3dSmrg
731debfc3dSmrg// These values can be overridden in the target configuration file.
741debfc3dSmrg// The default values are appropriate for many 32-bit targets.
751debfc3dSmrg
761debfc3dSmrg// GCC only intrinsically supports modulo integral types.  The only remaining
771debfc3dSmrg// integral exceptional values is division by zero.  Only targets that do not
781debfc3dSmrg// signal division by zero in some "hard to ignore" way should use false.
791debfc3dSmrg#ifndef __glibcxx_integral_traps
801debfc3dSmrg# define __glibcxx_integral_traps true
811debfc3dSmrg#endif
821debfc3dSmrg
831debfc3dSmrg// float
841debfc3dSmrg//
851debfc3dSmrg
861debfc3dSmrg// Default values.  Should be overridden in configuration files if necessary.
871debfc3dSmrg
881debfc3dSmrg#ifndef __glibcxx_float_has_denorm_loss
891debfc3dSmrg#  define __glibcxx_float_has_denorm_loss false
901debfc3dSmrg#endif
911debfc3dSmrg#ifndef __glibcxx_float_traps
921debfc3dSmrg#  define __glibcxx_float_traps false
931debfc3dSmrg#endif
941debfc3dSmrg#ifndef __glibcxx_float_tinyness_before
951debfc3dSmrg#  define __glibcxx_float_tinyness_before false
961debfc3dSmrg#endif
971debfc3dSmrg
981debfc3dSmrg// double
991debfc3dSmrg
1001debfc3dSmrg// Default values.  Should be overridden in configuration files if necessary.
1011debfc3dSmrg
1021debfc3dSmrg#ifndef __glibcxx_double_has_denorm_loss
1031debfc3dSmrg#  define __glibcxx_double_has_denorm_loss false
1041debfc3dSmrg#endif
1051debfc3dSmrg#ifndef __glibcxx_double_traps
1061debfc3dSmrg#  define __glibcxx_double_traps false
1071debfc3dSmrg#endif
1081debfc3dSmrg#ifndef __glibcxx_double_tinyness_before
1091debfc3dSmrg#  define __glibcxx_double_tinyness_before false
1101debfc3dSmrg#endif
1111debfc3dSmrg
1121debfc3dSmrg// long double
1131debfc3dSmrg
1141debfc3dSmrg// Default values.  Should be overridden in configuration files if necessary.
1151debfc3dSmrg
1161debfc3dSmrg#ifndef __glibcxx_long_double_has_denorm_loss
1171debfc3dSmrg#  define __glibcxx_long_double_has_denorm_loss false
1181debfc3dSmrg#endif
1191debfc3dSmrg#ifndef __glibcxx_long_double_traps
1201debfc3dSmrg#  define __glibcxx_long_double_traps false
1211debfc3dSmrg#endif
1221debfc3dSmrg#ifndef __glibcxx_long_double_tinyness_before
1231debfc3dSmrg#  define __glibcxx_long_double_tinyness_before false
1241debfc3dSmrg#endif
1251debfc3dSmrg
1261debfc3dSmrg// You should not need to define any macros below this point.
1271debfc3dSmrg
1281debfc3dSmrg#define __glibcxx_signed_b(T,B)	((T)(-1) < 0)
1291debfc3dSmrg
1301debfc3dSmrg#define __glibcxx_min_b(T,B)					\
1311debfc3dSmrg  (__glibcxx_signed_b (T,B) ? -__glibcxx_max_b (T,B) - 1 : (T)0)
1321debfc3dSmrg
1331debfc3dSmrg#define __glibcxx_max_b(T,B)						\
1341debfc3dSmrg  (__glibcxx_signed_b (T,B) ?						\
1351debfc3dSmrg   (((((T)1 << (__glibcxx_digits_b (T,B) - 1)) - 1) << 1) + 1) : ~(T)0)
1361debfc3dSmrg
1371debfc3dSmrg#define __glibcxx_digits_b(T,B)				\
1381debfc3dSmrg  (B - __glibcxx_signed_b (T,B))
1391debfc3dSmrg
1401debfc3dSmrg// The fraction 643/2136 approximates log10(2) to 7 significant digits.
1411debfc3dSmrg#define __glibcxx_digits10_b(T,B)		\
1421debfc3dSmrg  (__glibcxx_digits_b (T,B) * 643L / 2136)
1431debfc3dSmrg
1441debfc3dSmrg#define __glibcxx_signed(T) \
1451debfc3dSmrg  __glibcxx_signed_b (T, sizeof(T) * __CHAR_BIT__)
1461debfc3dSmrg#define __glibcxx_min(T) \
1471debfc3dSmrg  __glibcxx_min_b (T, sizeof(T) * __CHAR_BIT__)
1481debfc3dSmrg#define __glibcxx_max(T) \
1491debfc3dSmrg  __glibcxx_max_b (T, sizeof(T) * __CHAR_BIT__)
1501debfc3dSmrg#define __glibcxx_digits(T) \
1511debfc3dSmrg  __glibcxx_digits_b (T, sizeof(T) * __CHAR_BIT__)
1521debfc3dSmrg#define __glibcxx_digits10(T) \
1531debfc3dSmrg  __glibcxx_digits10_b (T, sizeof(T) * __CHAR_BIT__)
1541debfc3dSmrg
1551debfc3dSmrg#define __glibcxx_max_digits10(T) \
1561debfc3dSmrg  (2 + (T) * 643L / 2136)
1571debfc3dSmrg
1581debfc3dSmrgnamespace std _GLIBCXX_VISIBILITY(default)
1591debfc3dSmrg{
1601debfc3dSmrg_GLIBCXX_BEGIN_NAMESPACE_VERSION
1611debfc3dSmrg
1621debfc3dSmrg  /**
1631debfc3dSmrg   *  @brief Describes the rounding style for floating-point types.
1641debfc3dSmrg   *
1651debfc3dSmrg   *  This is used in the std::numeric_limits class.
1661debfc3dSmrg  */
1671debfc3dSmrg  enum float_round_style
1681debfc3dSmrg  {
1691debfc3dSmrg    round_indeterminate       = -1,    /// Intermediate.
1701debfc3dSmrg    round_toward_zero         = 0,     /// To zero.
1711debfc3dSmrg    round_to_nearest          = 1,     /// To the nearest representable value.
1721debfc3dSmrg    round_toward_infinity     = 2,     /// To infinity.
1731debfc3dSmrg    round_toward_neg_infinity = 3      /// To negative infinity.
1741debfc3dSmrg  };
1751debfc3dSmrg
1761debfc3dSmrg  /**
1771debfc3dSmrg   *  @brief Describes the denormalization for floating-point types.
1781debfc3dSmrg   *
1791debfc3dSmrg   *  These values represent the presence or absence of a variable number
1801debfc3dSmrg   *  of exponent bits.  This type is used in the std::numeric_limits class.
1811debfc3dSmrg  */
1821debfc3dSmrg  enum float_denorm_style
1831debfc3dSmrg  {
1841debfc3dSmrg    /// Indeterminate at compile time whether denormalized values are allowed.
1851debfc3dSmrg    denorm_indeterminate = -1,
1861debfc3dSmrg    /// The type does not allow denormalized values.
1871debfc3dSmrg    denorm_absent        = 0,
1881debfc3dSmrg    /// The type allows denormalized values.
1891debfc3dSmrg    denorm_present       = 1
1901debfc3dSmrg  };
1911debfc3dSmrg
1921debfc3dSmrg  /**
1931debfc3dSmrg   *  @brief Part of std::numeric_limits.
1941debfc3dSmrg   *
1951debfc3dSmrg   *  The @c static @c const members are usable as integral constant
1961debfc3dSmrg   *  expressions.
1971debfc3dSmrg   *
1981debfc3dSmrg   *  @note This is a separate class for purposes of efficiency; you
1991debfc3dSmrg   *        should only access these members as part of an instantiation
2001debfc3dSmrg   *        of the std::numeric_limits class.
2011debfc3dSmrg  */
2021debfc3dSmrg  struct __numeric_limits_base
2031debfc3dSmrg  {
2041debfc3dSmrg    /** This will be true for all fundamental types (which have
2051debfc3dSmrg	specializations), and false for everything else.  */
2061debfc3dSmrg    static _GLIBCXX_USE_CONSTEXPR bool is_specialized = false;
2071debfc3dSmrg
2081debfc3dSmrg    /** The number of @c radix digits that be represented without change:  for
2091debfc3dSmrg	integer types, the number of non-sign bits in the mantissa; for
2101debfc3dSmrg	floating types, the number of @c radix digits in the mantissa.  */
2111debfc3dSmrg    static _GLIBCXX_USE_CONSTEXPR int digits = 0;
2121debfc3dSmrg
2131debfc3dSmrg    /** The number of base 10 digits that can be represented without change. */
2141debfc3dSmrg    static _GLIBCXX_USE_CONSTEXPR int digits10 = 0;
2151debfc3dSmrg
2161debfc3dSmrg#if __cplusplus >= 201103L
2171debfc3dSmrg    /** The number of base 10 digits required to ensure that values which
2181debfc3dSmrg	differ are always differentiated.  */
2191debfc3dSmrg    static constexpr int max_digits10 = 0;
2201debfc3dSmrg#endif
2211debfc3dSmrg
2221debfc3dSmrg    /** True if the type is signed.  */
2231debfc3dSmrg    static _GLIBCXX_USE_CONSTEXPR bool is_signed = false;
2241debfc3dSmrg
2251debfc3dSmrg    /** True if the type is integer.  */
2261debfc3dSmrg    static _GLIBCXX_USE_CONSTEXPR bool is_integer = false;
2271debfc3dSmrg
2281debfc3dSmrg    /** True if the type uses an exact representation. All integer types are
2291debfc3dSmrg	exact, but not all exact types are integer.  For example, rational and
2301debfc3dSmrg	fixed-exponent representations are exact but not integer. */
2311debfc3dSmrg    static _GLIBCXX_USE_CONSTEXPR bool is_exact = false;
2321debfc3dSmrg
2331debfc3dSmrg    /** For integer types, specifies the base of the representation.  For
2341debfc3dSmrg	floating types, specifies the base of the exponent representation.  */
2351debfc3dSmrg    static _GLIBCXX_USE_CONSTEXPR int radix = 0;
2361debfc3dSmrg
2371debfc3dSmrg    /** The minimum negative integer such that @c radix raised to the power of
2381debfc3dSmrg	(one less than that integer) is a normalized floating point number.  */
2391debfc3dSmrg    static _GLIBCXX_USE_CONSTEXPR int min_exponent = 0;
2401debfc3dSmrg
2411debfc3dSmrg    /** The minimum negative integer such that 10 raised to that power is in
2421debfc3dSmrg	the range of normalized floating point numbers.  */
2431debfc3dSmrg    static _GLIBCXX_USE_CONSTEXPR int min_exponent10 = 0;
2441debfc3dSmrg
2451debfc3dSmrg    /** The maximum positive integer such that @c radix raised to the power of
2461debfc3dSmrg	(one less than that integer) is a representable finite floating point
2471debfc3dSmrg	number.  */
2481debfc3dSmrg    static _GLIBCXX_USE_CONSTEXPR int max_exponent = 0;
2491debfc3dSmrg
2501debfc3dSmrg    /** The maximum positive integer such that 10 raised to that power is in
2511debfc3dSmrg	the range of representable finite floating point numbers.  */
2521debfc3dSmrg    static _GLIBCXX_USE_CONSTEXPR int max_exponent10 = 0;
2531debfc3dSmrg
2541debfc3dSmrg    /** True if the type has a representation for positive infinity.  */
2551debfc3dSmrg    static _GLIBCXX_USE_CONSTEXPR bool has_infinity = false;
2561debfc3dSmrg
2571debfc3dSmrg    /** True if the type has a representation for a quiet (non-signaling)
2581debfc3dSmrg	Not a Number.  */
2591debfc3dSmrg    static _GLIBCXX_USE_CONSTEXPR bool has_quiet_NaN = false;
2601debfc3dSmrg
2611debfc3dSmrg    /** True if the type has a representation for a signaling
2621debfc3dSmrg	Not a Number.  */
2631debfc3dSmrg    static _GLIBCXX_USE_CONSTEXPR bool has_signaling_NaN = false;
2641debfc3dSmrg
2651debfc3dSmrg    /** See std::float_denorm_style for more information.  */
2661debfc3dSmrg    static _GLIBCXX_USE_CONSTEXPR float_denorm_style has_denorm = denorm_absent;
2671debfc3dSmrg
2681debfc3dSmrg    /** True if loss of accuracy is detected as a denormalization loss,
2691debfc3dSmrg	rather than as an inexact result. */
2701debfc3dSmrg    static _GLIBCXX_USE_CONSTEXPR bool has_denorm_loss = false;
2711debfc3dSmrg
2721debfc3dSmrg    /** True if-and-only-if the type adheres to the IEC 559 standard, also
2731debfc3dSmrg	known as IEEE 754.  (Only makes sense for floating point types.)  */
2741debfc3dSmrg    static _GLIBCXX_USE_CONSTEXPR bool is_iec559 = false;
2751debfc3dSmrg
2761debfc3dSmrg    /** True if the set of values representable by the type is
2771debfc3dSmrg	finite.  All built-in types are bounded, this member would be
2781debfc3dSmrg	false for arbitrary precision types. */
2791debfc3dSmrg    static _GLIBCXX_USE_CONSTEXPR bool is_bounded = false;
2801debfc3dSmrg
2811debfc3dSmrg    /** True if the type is @e modulo. A type is modulo if, for any
2821debfc3dSmrg	operation involving +, -, or * on values of that type whose
2831debfc3dSmrg	result would fall outside the range [min(),max()], the value
2841debfc3dSmrg	returned differs from the true value by an integer multiple of
2851debfc3dSmrg	max() - min() + 1. On most machines, this is false for floating
2861debfc3dSmrg	types, true for unsigned integers, and true for signed integers.
2871debfc3dSmrg	See PR22200 about signed integers.  */
2881debfc3dSmrg    static _GLIBCXX_USE_CONSTEXPR bool is_modulo = false;
2891debfc3dSmrg
2901debfc3dSmrg    /** True if trapping is implemented for this type.  */
2911debfc3dSmrg    static _GLIBCXX_USE_CONSTEXPR bool traps = false;
2921debfc3dSmrg
2931debfc3dSmrg    /** True if tininess is detected before rounding.  (see IEC 559)  */
2941debfc3dSmrg    static _GLIBCXX_USE_CONSTEXPR bool tinyness_before = false;
2951debfc3dSmrg
2961debfc3dSmrg    /** See std::float_round_style for more information.  This is only
2971debfc3dSmrg	meaningful for floating types; integer types will all be
2981debfc3dSmrg	round_toward_zero.  */
2991debfc3dSmrg    static _GLIBCXX_USE_CONSTEXPR float_round_style round_style =
3001debfc3dSmrg						    round_toward_zero;
3011debfc3dSmrg  };
3021debfc3dSmrg
3031debfc3dSmrg  /**
3041debfc3dSmrg   *  @brief Properties of fundamental types.
3051debfc3dSmrg   *
3061debfc3dSmrg   *  This class allows a program to obtain information about the
3071debfc3dSmrg   *  representation of a fundamental type on a given platform.  For
3081debfc3dSmrg   *  non-fundamental types, the functions will return 0 and the data
3091debfc3dSmrg   *  members will all be @c false.
3101debfc3dSmrg  */
3111debfc3dSmrg  template<typename _Tp>
3121debfc3dSmrg    struct numeric_limits : public __numeric_limits_base
3131debfc3dSmrg    {
3141debfc3dSmrg      /** The minimum finite value, or for floating types with
3151debfc3dSmrg	  denormalization, the minimum positive normalized value.  */
3161debfc3dSmrg      static _GLIBCXX_CONSTEXPR _Tp
3171debfc3dSmrg      min() _GLIBCXX_USE_NOEXCEPT { return _Tp(); }
3181debfc3dSmrg
3191debfc3dSmrg      /** The maximum finite value.  */
3201debfc3dSmrg      static _GLIBCXX_CONSTEXPR _Tp
3211debfc3dSmrg      max() _GLIBCXX_USE_NOEXCEPT { return _Tp(); }
3221debfc3dSmrg
3231debfc3dSmrg#if __cplusplus >= 201103L
3241debfc3dSmrg      /** A finite value x such that there is no other finite value y
3251debfc3dSmrg       *  where y < x.  */
3261debfc3dSmrg      static constexpr _Tp
3271debfc3dSmrg      lowest() noexcept { return _Tp(); }
3281debfc3dSmrg#endif
3291debfc3dSmrg
3301debfc3dSmrg      /** The @e machine @e epsilon:  the difference between 1 and the least
3311debfc3dSmrg	  value greater than 1 that is representable.  */
3321debfc3dSmrg      static _GLIBCXX_CONSTEXPR _Tp
3331debfc3dSmrg      epsilon() _GLIBCXX_USE_NOEXCEPT { return _Tp(); }
3341debfc3dSmrg
3351debfc3dSmrg      /** The maximum rounding error measurement (see LIA-1).  */
3361debfc3dSmrg      static _GLIBCXX_CONSTEXPR _Tp
3371debfc3dSmrg      round_error() _GLIBCXX_USE_NOEXCEPT { return _Tp(); }
3381debfc3dSmrg
3391debfc3dSmrg      /** The representation of positive infinity, if @c has_infinity.  */
3401debfc3dSmrg      static _GLIBCXX_CONSTEXPR _Tp
3411debfc3dSmrg      infinity() _GLIBCXX_USE_NOEXCEPT { return _Tp(); }
3421debfc3dSmrg
3431debfc3dSmrg      /** The representation of a quiet Not a Number,
3441debfc3dSmrg	  if @c has_quiet_NaN. */
3451debfc3dSmrg      static _GLIBCXX_CONSTEXPR _Tp
3461debfc3dSmrg      quiet_NaN() _GLIBCXX_USE_NOEXCEPT { return _Tp(); }
3471debfc3dSmrg
3481debfc3dSmrg      /** The representation of a signaling Not a Number, if
3491debfc3dSmrg	  @c has_signaling_NaN. */
3501debfc3dSmrg      static _GLIBCXX_CONSTEXPR _Tp
3511debfc3dSmrg      signaling_NaN() _GLIBCXX_USE_NOEXCEPT { return _Tp(); }
3521debfc3dSmrg
3531debfc3dSmrg      /** The minimum positive denormalized value.  For types where
3541debfc3dSmrg	  @c has_denorm is false, this is the minimum positive normalized
3551debfc3dSmrg	  value.  */
3561debfc3dSmrg      static _GLIBCXX_CONSTEXPR _Tp
3571debfc3dSmrg      denorm_min() _GLIBCXX_USE_NOEXCEPT { return _Tp(); }
3581debfc3dSmrg    };
3591debfc3dSmrg
3601debfc3dSmrg  // _GLIBCXX_RESOLVE_LIB_DEFECTS
3611debfc3dSmrg  // 559. numeric_limits<const T>
3621debfc3dSmrg
3631debfc3dSmrg  template<typename _Tp>
3641debfc3dSmrg    struct numeric_limits<const _Tp>
3651debfc3dSmrg    : public numeric_limits<_Tp> { };
3661debfc3dSmrg
3671debfc3dSmrg  template<typename _Tp>
3681debfc3dSmrg    struct numeric_limits<volatile _Tp>
3691debfc3dSmrg    : public numeric_limits<_Tp> { };
3701debfc3dSmrg
3711debfc3dSmrg  template<typename _Tp>
3721debfc3dSmrg    struct numeric_limits<const volatile _Tp>
3731debfc3dSmrg    : public numeric_limits<_Tp> { };
3741debfc3dSmrg
3751debfc3dSmrg  // Now there follow 16 explicit specializations.  Yes, 16.  Make sure
3761debfc3dSmrg  // you get the count right. (18 in C++11 mode, with char16_t and char32_t.)
377c0a68be4Smrg  // (+1 if char8_t is enabled.)
3781debfc3dSmrg
3791debfc3dSmrg  // _GLIBCXX_RESOLVE_LIB_DEFECTS
3801debfc3dSmrg  // 184. numeric_limits<bool> wording problems
3811debfc3dSmrg
3821debfc3dSmrg  /// numeric_limits<bool> specialization.
3831debfc3dSmrg  template<>
3841debfc3dSmrg    struct numeric_limits<bool>
3851debfc3dSmrg    {
3861debfc3dSmrg      static _GLIBCXX_USE_CONSTEXPR bool is_specialized = true;
3871debfc3dSmrg
3881debfc3dSmrg      static _GLIBCXX_CONSTEXPR bool
3891debfc3dSmrg      min() _GLIBCXX_USE_NOEXCEPT { return false; }
3901debfc3dSmrg
3911debfc3dSmrg      static _GLIBCXX_CONSTEXPR bool
3921debfc3dSmrg      max() _GLIBCXX_USE_NOEXCEPT { return true; }
3931debfc3dSmrg
3941debfc3dSmrg#if __cplusplus >= 201103L
3951debfc3dSmrg      static constexpr bool
3961debfc3dSmrg      lowest() noexcept { return min(); }
3971debfc3dSmrg#endif
3981debfc3dSmrg      static _GLIBCXX_USE_CONSTEXPR int digits = 1;
3991debfc3dSmrg      static _GLIBCXX_USE_CONSTEXPR int digits10 = 0;
4001debfc3dSmrg#if __cplusplus >= 201103L
4011debfc3dSmrg      static constexpr int max_digits10 = 0;
4021debfc3dSmrg#endif
4031debfc3dSmrg      static _GLIBCXX_USE_CONSTEXPR bool is_signed = false;
4041debfc3dSmrg      static _GLIBCXX_USE_CONSTEXPR bool is_integer = true;
4051debfc3dSmrg      static _GLIBCXX_USE_CONSTEXPR bool is_exact = true;
4061debfc3dSmrg      static _GLIBCXX_USE_CONSTEXPR int radix = 2;
4071debfc3dSmrg
4081debfc3dSmrg      static _GLIBCXX_CONSTEXPR bool
4091debfc3dSmrg      epsilon() _GLIBCXX_USE_NOEXCEPT { return false; }
4101debfc3dSmrg
4111debfc3dSmrg      static _GLIBCXX_CONSTEXPR bool
4121debfc3dSmrg      round_error() _GLIBCXX_USE_NOEXCEPT { return false; }
4131debfc3dSmrg
4141debfc3dSmrg      static _GLIBCXX_USE_CONSTEXPR int min_exponent = 0;
4151debfc3dSmrg      static _GLIBCXX_USE_CONSTEXPR int min_exponent10 = 0;
4161debfc3dSmrg      static _GLIBCXX_USE_CONSTEXPR int max_exponent = 0;
4171debfc3dSmrg      static _GLIBCXX_USE_CONSTEXPR int max_exponent10 = 0;
4181debfc3dSmrg
4191debfc3dSmrg      static _GLIBCXX_USE_CONSTEXPR bool has_infinity = false;
4201debfc3dSmrg      static _GLIBCXX_USE_CONSTEXPR bool has_quiet_NaN = false;
4211debfc3dSmrg      static _GLIBCXX_USE_CONSTEXPR bool has_signaling_NaN = false;
4221debfc3dSmrg      static _GLIBCXX_USE_CONSTEXPR float_denorm_style has_denorm
4231debfc3dSmrg       = denorm_absent;
4241debfc3dSmrg      static _GLIBCXX_USE_CONSTEXPR bool has_denorm_loss = false;
4251debfc3dSmrg
4261debfc3dSmrg      static _GLIBCXX_CONSTEXPR bool
4271debfc3dSmrg      infinity() _GLIBCXX_USE_NOEXCEPT { return false; }
4281debfc3dSmrg
4291debfc3dSmrg      static _GLIBCXX_CONSTEXPR bool
4301debfc3dSmrg      quiet_NaN() _GLIBCXX_USE_NOEXCEPT { return false; }
4311debfc3dSmrg
4321debfc3dSmrg      static _GLIBCXX_CONSTEXPR bool
4331debfc3dSmrg      signaling_NaN() _GLIBCXX_USE_NOEXCEPT { return false; }
4341debfc3dSmrg
4351debfc3dSmrg      static _GLIBCXX_CONSTEXPR bool
4361debfc3dSmrg      denorm_min() _GLIBCXX_USE_NOEXCEPT { return false; }
4371debfc3dSmrg
4381debfc3dSmrg      static _GLIBCXX_USE_CONSTEXPR bool is_iec559 = false;
4391debfc3dSmrg      static _GLIBCXX_USE_CONSTEXPR bool is_bounded = true;
4401debfc3dSmrg      static _GLIBCXX_USE_CONSTEXPR bool is_modulo = false;
4411debfc3dSmrg
4421debfc3dSmrg      // It is not clear what it means for a boolean type to trap.
4431debfc3dSmrg      // This is a DR on the LWG issue list.  Here, I use integer
4441debfc3dSmrg      // promotion semantics.
4451debfc3dSmrg      static _GLIBCXX_USE_CONSTEXPR bool traps = __glibcxx_integral_traps;
4461debfc3dSmrg      static _GLIBCXX_USE_CONSTEXPR bool tinyness_before = false;
4471debfc3dSmrg      static _GLIBCXX_USE_CONSTEXPR float_round_style round_style
4481debfc3dSmrg       = round_toward_zero;
4491debfc3dSmrg    };
4501debfc3dSmrg
4511debfc3dSmrg  /// numeric_limits<char> specialization.
4521debfc3dSmrg  template<>
4531debfc3dSmrg    struct numeric_limits<char>
4541debfc3dSmrg    {
4551debfc3dSmrg      static _GLIBCXX_USE_CONSTEXPR bool is_specialized = true;
4561debfc3dSmrg
4571debfc3dSmrg      static _GLIBCXX_CONSTEXPR char
4581debfc3dSmrg      min() _GLIBCXX_USE_NOEXCEPT { return __glibcxx_min(char); }
4591debfc3dSmrg
4601debfc3dSmrg      static _GLIBCXX_CONSTEXPR char
4611debfc3dSmrg      max() _GLIBCXX_USE_NOEXCEPT { return __glibcxx_max(char); }
4621debfc3dSmrg
4631debfc3dSmrg#if __cplusplus >= 201103L
4641debfc3dSmrg      static constexpr char
4651debfc3dSmrg      lowest() noexcept { return min(); }
4661debfc3dSmrg#endif
4671debfc3dSmrg
4681debfc3dSmrg      static _GLIBCXX_USE_CONSTEXPR int digits = __glibcxx_digits (char);
4691debfc3dSmrg      static _GLIBCXX_USE_CONSTEXPR int digits10 = __glibcxx_digits10 (char);
4701debfc3dSmrg#if __cplusplus >= 201103L
4711debfc3dSmrg      static constexpr int max_digits10 = 0;
4721debfc3dSmrg#endif
4731debfc3dSmrg      static _GLIBCXX_USE_CONSTEXPR bool is_signed = __glibcxx_signed (char);
4741debfc3dSmrg      static _GLIBCXX_USE_CONSTEXPR bool is_integer = true;
4751debfc3dSmrg      static _GLIBCXX_USE_CONSTEXPR bool is_exact = true;
4761debfc3dSmrg      static _GLIBCXX_USE_CONSTEXPR int radix = 2;
4771debfc3dSmrg
4781debfc3dSmrg      static _GLIBCXX_CONSTEXPR char
4791debfc3dSmrg      epsilon() _GLIBCXX_USE_NOEXCEPT { return 0; }
4801debfc3dSmrg
4811debfc3dSmrg      static _GLIBCXX_CONSTEXPR char
4821debfc3dSmrg      round_error() _GLIBCXX_USE_NOEXCEPT { return 0; }
4831debfc3dSmrg
4841debfc3dSmrg      static _GLIBCXX_USE_CONSTEXPR int min_exponent = 0;
4851debfc3dSmrg      static _GLIBCXX_USE_CONSTEXPR int min_exponent10 = 0;
4861debfc3dSmrg      static _GLIBCXX_USE_CONSTEXPR int max_exponent = 0;
4871debfc3dSmrg      static _GLIBCXX_USE_CONSTEXPR int max_exponent10 = 0;
4881debfc3dSmrg
4891debfc3dSmrg      static _GLIBCXX_USE_CONSTEXPR bool has_infinity = false;
4901debfc3dSmrg      static _GLIBCXX_USE_CONSTEXPR bool has_quiet_NaN = false;
4911debfc3dSmrg      static _GLIBCXX_USE_CONSTEXPR bool has_signaling_NaN = false;
4921debfc3dSmrg      static _GLIBCXX_USE_CONSTEXPR float_denorm_style has_denorm
4931debfc3dSmrg       = denorm_absent;
4941debfc3dSmrg      static _GLIBCXX_USE_CONSTEXPR bool has_denorm_loss = false;
4951debfc3dSmrg
4961debfc3dSmrg      static _GLIBCXX_CONSTEXPR
4971debfc3dSmrg      char infinity() _GLIBCXX_USE_NOEXCEPT { return char(); }
4981debfc3dSmrg
4991debfc3dSmrg      static _GLIBCXX_CONSTEXPR char
5001debfc3dSmrg      quiet_NaN() _GLIBCXX_USE_NOEXCEPT { return char(); }
5011debfc3dSmrg
5021debfc3dSmrg      static _GLIBCXX_CONSTEXPR char
5031debfc3dSmrg      signaling_NaN() _GLIBCXX_USE_NOEXCEPT { return char(); }
5041debfc3dSmrg
5051debfc3dSmrg      static _GLIBCXX_CONSTEXPR char
5061debfc3dSmrg      denorm_min() _GLIBCXX_USE_NOEXCEPT { return static_cast<char>(0); }
5071debfc3dSmrg
5081debfc3dSmrg      static _GLIBCXX_USE_CONSTEXPR bool is_iec559 = false;
5091debfc3dSmrg      static _GLIBCXX_USE_CONSTEXPR bool is_bounded = true;
5101debfc3dSmrg      static _GLIBCXX_USE_CONSTEXPR bool is_modulo = !is_signed;
5111debfc3dSmrg
5121debfc3dSmrg      static _GLIBCXX_USE_CONSTEXPR bool traps = __glibcxx_integral_traps;
5131debfc3dSmrg      static _GLIBCXX_USE_CONSTEXPR bool tinyness_before = false;
5141debfc3dSmrg      static _GLIBCXX_USE_CONSTEXPR float_round_style round_style
5151debfc3dSmrg       = round_toward_zero;
5161debfc3dSmrg    };
5171debfc3dSmrg
5181debfc3dSmrg  /// numeric_limits<signed char> specialization.
5191debfc3dSmrg  template<>
5201debfc3dSmrg    struct numeric_limits<signed char>
5211debfc3dSmrg    {
5221debfc3dSmrg      static _GLIBCXX_USE_CONSTEXPR bool is_specialized = true;
5231debfc3dSmrg
5241debfc3dSmrg      static _GLIBCXX_CONSTEXPR signed char
5251debfc3dSmrg      min() _GLIBCXX_USE_NOEXCEPT { return -__SCHAR_MAX__ - 1; }
5261debfc3dSmrg
5271debfc3dSmrg      static _GLIBCXX_CONSTEXPR signed char
5281debfc3dSmrg      max() _GLIBCXX_USE_NOEXCEPT { return __SCHAR_MAX__; }
5291debfc3dSmrg
5301debfc3dSmrg#if __cplusplus >= 201103L
5311debfc3dSmrg      static constexpr signed char
5321debfc3dSmrg      lowest() noexcept { return min(); }
5331debfc3dSmrg#endif
5341debfc3dSmrg
5351debfc3dSmrg      static _GLIBCXX_USE_CONSTEXPR int digits = __glibcxx_digits (signed char);
5361debfc3dSmrg      static _GLIBCXX_USE_CONSTEXPR int digits10
5371debfc3dSmrg       = __glibcxx_digits10 (signed char);
5381debfc3dSmrg#if __cplusplus >= 201103L
5391debfc3dSmrg      static constexpr int max_digits10 = 0;
5401debfc3dSmrg#endif
5411debfc3dSmrg      static _GLIBCXX_USE_CONSTEXPR bool is_signed = true;
5421debfc3dSmrg      static _GLIBCXX_USE_CONSTEXPR bool is_integer = true;
5431debfc3dSmrg      static _GLIBCXX_USE_CONSTEXPR bool is_exact = true;
5441debfc3dSmrg      static _GLIBCXX_USE_CONSTEXPR int radix = 2;
5451debfc3dSmrg
5461debfc3dSmrg      static _GLIBCXX_CONSTEXPR signed char
5471debfc3dSmrg      epsilon() _GLIBCXX_USE_NOEXCEPT { return 0; }
5481debfc3dSmrg
5491debfc3dSmrg      static _GLIBCXX_CONSTEXPR signed char
5501debfc3dSmrg      round_error() _GLIBCXX_USE_NOEXCEPT { return 0; }
5511debfc3dSmrg
5521debfc3dSmrg      static _GLIBCXX_USE_CONSTEXPR int min_exponent = 0;
5531debfc3dSmrg      static _GLIBCXX_USE_CONSTEXPR int min_exponent10 = 0;
5541debfc3dSmrg      static _GLIBCXX_USE_CONSTEXPR int max_exponent = 0;
5551debfc3dSmrg      static _GLIBCXX_USE_CONSTEXPR int max_exponent10 = 0;
5561debfc3dSmrg
5571debfc3dSmrg      static _GLIBCXX_USE_CONSTEXPR bool has_infinity = false;
5581debfc3dSmrg      static _GLIBCXX_USE_CONSTEXPR bool has_quiet_NaN = false;
5591debfc3dSmrg      static _GLIBCXX_USE_CONSTEXPR bool has_signaling_NaN = false;
5601debfc3dSmrg      static _GLIBCXX_USE_CONSTEXPR float_denorm_style has_denorm
5611debfc3dSmrg       = denorm_absent;
5621debfc3dSmrg      static _GLIBCXX_USE_CONSTEXPR bool has_denorm_loss = false;
5631debfc3dSmrg
5641debfc3dSmrg      static _GLIBCXX_CONSTEXPR signed char
5651debfc3dSmrg      infinity() _GLIBCXX_USE_NOEXCEPT { return static_cast<signed char>(0); }
5661debfc3dSmrg
5671debfc3dSmrg      static _GLIBCXX_CONSTEXPR signed char
5681debfc3dSmrg      quiet_NaN() _GLIBCXX_USE_NOEXCEPT { return static_cast<signed char>(0); }
5691debfc3dSmrg
5701debfc3dSmrg      static _GLIBCXX_CONSTEXPR signed char
5711debfc3dSmrg      signaling_NaN() _GLIBCXX_USE_NOEXCEPT
5721debfc3dSmrg      { return static_cast<signed char>(0); }
5731debfc3dSmrg
5741debfc3dSmrg      static _GLIBCXX_CONSTEXPR signed char
5751debfc3dSmrg      denorm_min() _GLIBCXX_USE_NOEXCEPT
5761debfc3dSmrg      { return static_cast<signed char>(0); }
5771debfc3dSmrg
5781debfc3dSmrg      static _GLIBCXX_USE_CONSTEXPR bool is_iec559 = false;
5791debfc3dSmrg      static _GLIBCXX_USE_CONSTEXPR bool is_bounded = true;
5801debfc3dSmrg      static _GLIBCXX_USE_CONSTEXPR bool is_modulo = false;
5811debfc3dSmrg
5821debfc3dSmrg      static _GLIBCXX_USE_CONSTEXPR bool traps = __glibcxx_integral_traps;
5831debfc3dSmrg      static _GLIBCXX_USE_CONSTEXPR bool tinyness_before = false;
5841debfc3dSmrg      static _GLIBCXX_USE_CONSTEXPR float_round_style round_style
5851debfc3dSmrg       = round_toward_zero;
5861debfc3dSmrg    };
5871debfc3dSmrg
5881debfc3dSmrg  /// numeric_limits<unsigned char> specialization.
5891debfc3dSmrg  template<>
5901debfc3dSmrg    struct numeric_limits<unsigned char>
5911debfc3dSmrg    {
5921debfc3dSmrg      static _GLIBCXX_USE_CONSTEXPR bool is_specialized = true;
5931debfc3dSmrg
5941debfc3dSmrg      static _GLIBCXX_CONSTEXPR unsigned char
5951debfc3dSmrg      min() _GLIBCXX_USE_NOEXCEPT { return 0; }
5961debfc3dSmrg
5971debfc3dSmrg      static _GLIBCXX_CONSTEXPR unsigned char
5981debfc3dSmrg      max() _GLIBCXX_USE_NOEXCEPT { return __SCHAR_MAX__ * 2U + 1; }
5991debfc3dSmrg
6001debfc3dSmrg#if __cplusplus >= 201103L
6011debfc3dSmrg      static constexpr unsigned char
6021debfc3dSmrg      lowest() noexcept { return min(); }
6031debfc3dSmrg#endif
6041debfc3dSmrg
6051debfc3dSmrg      static _GLIBCXX_USE_CONSTEXPR int digits
6061debfc3dSmrg       = __glibcxx_digits (unsigned char);
6071debfc3dSmrg      static _GLIBCXX_USE_CONSTEXPR int digits10
6081debfc3dSmrg       = __glibcxx_digits10 (unsigned char);
6091debfc3dSmrg#if __cplusplus >= 201103L
6101debfc3dSmrg      static constexpr int max_digits10 = 0;
6111debfc3dSmrg#endif
6121debfc3dSmrg      static _GLIBCXX_USE_CONSTEXPR bool is_signed = false;
6131debfc3dSmrg      static _GLIBCXX_USE_CONSTEXPR bool is_integer = true;
6141debfc3dSmrg      static _GLIBCXX_USE_CONSTEXPR bool is_exact = true;
6151debfc3dSmrg      static _GLIBCXX_USE_CONSTEXPR int radix = 2;
6161debfc3dSmrg
6171debfc3dSmrg      static _GLIBCXX_CONSTEXPR unsigned char
6181debfc3dSmrg      epsilon() _GLIBCXX_USE_NOEXCEPT { return 0; }
6191debfc3dSmrg
6201debfc3dSmrg      static _GLIBCXX_CONSTEXPR unsigned char
6211debfc3dSmrg      round_error() _GLIBCXX_USE_NOEXCEPT { return 0; }
6221debfc3dSmrg
6231debfc3dSmrg      static _GLIBCXX_USE_CONSTEXPR int min_exponent = 0;
6241debfc3dSmrg      static _GLIBCXX_USE_CONSTEXPR int min_exponent10 = 0;
6251debfc3dSmrg      static _GLIBCXX_USE_CONSTEXPR int max_exponent = 0;
6261debfc3dSmrg      static _GLIBCXX_USE_CONSTEXPR int max_exponent10 = 0;
6271debfc3dSmrg
6281debfc3dSmrg      static _GLIBCXX_USE_CONSTEXPR bool has_infinity = false;
6291debfc3dSmrg      static _GLIBCXX_USE_CONSTEXPR bool has_quiet_NaN = false;
6301debfc3dSmrg      static _GLIBCXX_USE_CONSTEXPR bool has_signaling_NaN = false;
6311debfc3dSmrg      static _GLIBCXX_USE_CONSTEXPR float_denorm_style has_denorm
6321debfc3dSmrg       = denorm_absent;
6331debfc3dSmrg      static _GLIBCXX_USE_CONSTEXPR bool has_denorm_loss = false;
6341debfc3dSmrg
6351debfc3dSmrg      static _GLIBCXX_CONSTEXPR unsigned char
6361debfc3dSmrg      infinity() _GLIBCXX_USE_NOEXCEPT
6371debfc3dSmrg      { return static_cast<unsigned char>(0); }
6381debfc3dSmrg
6391debfc3dSmrg      static _GLIBCXX_CONSTEXPR unsigned char
6401debfc3dSmrg      quiet_NaN() _GLIBCXX_USE_NOEXCEPT
6411debfc3dSmrg      { return static_cast<unsigned char>(0); }
6421debfc3dSmrg
6431debfc3dSmrg      static _GLIBCXX_CONSTEXPR unsigned char
6441debfc3dSmrg      signaling_NaN() _GLIBCXX_USE_NOEXCEPT
6451debfc3dSmrg      { return static_cast<unsigned char>(0); }
6461debfc3dSmrg
6471debfc3dSmrg      static _GLIBCXX_CONSTEXPR unsigned char
6481debfc3dSmrg      denorm_min() _GLIBCXX_USE_NOEXCEPT
6491debfc3dSmrg      { return static_cast<unsigned char>(0); }
6501debfc3dSmrg
6511debfc3dSmrg      static _GLIBCXX_USE_CONSTEXPR bool is_iec559 = false;
6521debfc3dSmrg      static _GLIBCXX_USE_CONSTEXPR bool is_bounded = true;
6531debfc3dSmrg      static _GLIBCXX_USE_CONSTEXPR bool is_modulo = true;
6541debfc3dSmrg
6551debfc3dSmrg      static _GLIBCXX_USE_CONSTEXPR bool traps = __glibcxx_integral_traps;
6561debfc3dSmrg      static _GLIBCXX_USE_CONSTEXPR bool tinyness_before = false;
6571debfc3dSmrg      static _GLIBCXX_USE_CONSTEXPR float_round_style round_style
6581debfc3dSmrg       = round_toward_zero;
6591debfc3dSmrg    };
6601debfc3dSmrg
6611debfc3dSmrg  /// numeric_limits<wchar_t> specialization.
6621debfc3dSmrg  template<>
6631debfc3dSmrg    struct numeric_limits<wchar_t>
6641debfc3dSmrg    {
6651debfc3dSmrg      static _GLIBCXX_USE_CONSTEXPR bool is_specialized = true;
6661debfc3dSmrg
6671debfc3dSmrg      static _GLIBCXX_CONSTEXPR wchar_t
6681debfc3dSmrg      min() _GLIBCXX_USE_NOEXCEPT { return __glibcxx_min (wchar_t); }
6691debfc3dSmrg
6701debfc3dSmrg      static _GLIBCXX_CONSTEXPR wchar_t
6711debfc3dSmrg      max() _GLIBCXX_USE_NOEXCEPT { return __glibcxx_max (wchar_t); }
6721debfc3dSmrg
6731debfc3dSmrg#if __cplusplus >= 201103L
6741debfc3dSmrg      static constexpr wchar_t
6751debfc3dSmrg      lowest() noexcept { return min(); }
6761debfc3dSmrg#endif
6771debfc3dSmrg
6781debfc3dSmrg      static _GLIBCXX_USE_CONSTEXPR int digits = __glibcxx_digits (wchar_t);
6791debfc3dSmrg      static _GLIBCXX_USE_CONSTEXPR int digits10
6801debfc3dSmrg       = __glibcxx_digits10 (wchar_t);
6811debfc3dSmrg#if __cplusplus >= 201103L
6821debfc3dSmrg      static constexpr int max_digits10 = 0;
6831debfc3dSmrg#endif
6841debfc3dSmrg      static _GLIBCXX_USE_CONSTEXPR bool is_signed = __glibcxx_signed (wchar_t);
6851debfc3dSmrg      static _GLIBCXX_USE_CONSTEXPR bool is_integer = true;
6861debfc3dSmrg      static _GLIBCXX_USE_CONSTEXPR bool is_exact = true;
6871debfc3dSmrg      static _GLIBCXX_USE_CONSTEXPR int radix = 2;
6881debfc3dSmrg
6891debfc3dSmrg      static _GLIBCXX_CONSTEXPR wchar_t
6901debfc3dSmrg      epsilon() _GLIBCXX_USE_NOEXCEPT { return 0; }
6911debfc3dSmrg
6921debfc3dSmrg      static _GLIBCXX_CONSTEXPR wchar_t
6931debfc3dSmrg      round_error() _GLIBCXX_USE_NOEXCEPT { return 0; }
6941debfc3dSmrg
6951debfc3dSmrg      static _GLIBCXX_USE_CONSTEXPR int min_exponent = 0;
6961debfc3dSmrg      static _GLIBCXX_USE_CONSTEXPR int min_exponent10 = 0;
6971debfc3dSmrg      static _GLIBCXX_USE_CONSTEXPR int max_exponent = 0;
6981debfc3dSmrg      static _GLIBCXX_USE_CONSTEXPR int max_exponent10 = 0;
6991debfc3dSmrg
7001debfc3dSmrg      static _GLIBCXX_USE_CONSTEXPR bool has_infinity = false;
7011debfc3dSmrg      static _GLIBCXX_USE_CONSTEXPR bool has_quiet_NaN = false;
7021debfc3dSmrg      static _GLIBCXX_USE_CONSTEXPR bool has_signaling_NaN = false;
7031debfc3dSmrg      static _GLIBCXX_USE_CONSTEXPR float_denorm_style has_denorm
7041debfc3dSmrg       = denorm_absent;
7051debfc3dSmrg      static _GLIBCXX_USE_CONSTEXPR bool has_denorm_loss = false;
7061debfc3dSmrg
7071debfc3dSmrg      static _GLIBCXX_CONSTEXPR wchar_t
7081debfc3dSmrg      infinity() _GLIBCXX_USE_NOEXCEPT { return wchar_t(); }
7091debfc3dSmrg
7101debfc3dSmrg      static _GLIBCXX_CONSTEXPR wchar_t
7111debfc3dSmrg      quiet_NaN() _GLIBCXX_USE_NOEXCEPT { return wchar_t(); }
7121debfc3dSmrg
7131debfc3dSmrg      static _GLIBCXX_CONSTEXPR wchar_t
7141debfc3dSmrg      signaling_NaN() _GLIBCXX_USE_NOEXCEPT { return wchar_t(); }
7151debfc3dSmrg
7161debfc3dSmrg      static _GLIBCXX_CONSTEXPR wchar_t
7171debfc3dSmrg      denorm_min() _GLIBCXX_USE_NOEXCEPT { return wchar_t(); }
7181debfc3dSmrg
7191debfc3dSmrg      static _GLIBCXX_USE_CONSTEXPR bool is_iec559 = false;
7201debfc3dSmrg      static _GLIBCXX_USE_CONSTEXPR bool is_bounded = true;
7211debfc3dSmrg      static _GLIBCXX_USE_CONSTEXPR bool is_modulo = !is_signed;
7221debfc3dSmrg
7231debfc3dSmrg      static _GLIBCXX_USE_CONSTEXPR bool traps = __glibcxx_integral_traps;
7241debfc3dSmrg      static _GLIBCXX_USE_CONSTEXPR bool tinyness_before = false;
7251debfc3dSmrg      static _GLIBCXX_USE_CONSTEXPR float_round_style round_style
7261debfc3dSmrg       = round_toward_zero;
7271debfc3dSmrg    };
7281debfc3dSmrg
729c0a68be4Smrg#if _GLIBCXX_USE_CHAR8_T
730c0a68be4Smrg  /// numeric_limits<char8_t> specialization.
731c0a68be4Smrg  template<>
732c0a68be4Smrg    struct numeric_limits<char8_t>
733c0a68be4Smrg    {
734c0a68be4Smrg      static _GLIBCXX_USE_CONSTEXPR bool is_specialized = true;
735c0a68be4Smrg
736c0a68be4Smrg      static _GLIBCXX_CONSTEXPR char8_t
737c0a68be4Smrg      min() _GLIBCXX_USE_NOEXCEPT { return __glibcxx_min (char8_t); }
738c0a68be4Smrg
739c0a68be4Smrg      static _GLIBCXX_CONSTEXPR char8_t
740c0a68be4Smrg      max() _GLIBCXX_USE_NOEXCEPT { return __glibcxx_max (char8_t); }
741c0a68be4Smrg
742c0a68be4Smrg      static _GLIBCXX_CONSTEXPR char8_t
743c0a68be4Smrg      lowest() _GLIBCXX_USE_NOEXCEPT { return min(); }
744c0a68be4Smrg
745c0a68be4Smrg      static _GLIBCXX_USE_CONSTEXPR int digits = __glibcxx_digits (char8_t);
746c0a68be4Smrg      static _GLIBCXX_USE_CONSTEXPR int digits10 = __glibcxx_digits10 (char8_t);
747c0a68be4Smrg      static _GLIBCXX_USE_CONSTEXPR int max_digits10 = 0;
748c0a68be4Smrg      static _GLIBCXX_USE_CONSTEXPR bool is_signed = __glibcxx_signed (char8_t);
749c0a68be4Smrg      static _GLIBCXX_USE_CONSTEXPR bool is_integer = true;
750c0a68be4Smrg      static _GLIBCXX_USE_CONSTEXPR bool is_exact = true;
751c0a68be4Smrg      static _GLIBCXX_USE_CONSTEXPR int radix = 2;
752c0a68be4Smrg
753c0a68be4Smrg      static _GLIBCXX_CONSTEXPR char8_t
754c0a68be4Smrg      epsilon() _GLIBCXX_USE_NOEXCEPT { return 0; }
755c0a68be4Smrg
756c0a68be4Smrg      static _GLIBCXX_CONSTEXPR char8_t
757c0a68be4Smrg      round_error() _GLIBCXX_USE_NOEXCEPT { return 0; }
758c0a68be4Smrg
759c0a68be4Smrg      static _GLIBCXX_USE_CONSTEXPR int min_exponent = 0;
760c0a68be4Smrg      static _GLIBCXX_USE_CONSTEXPR int min_exponent10 = 0;
761c0a68be4Smrg      static _GLIBCXX_USE_CONSTEXPR int max_exponent = 0;
762c0a68be4Smrg      static _GLIBCXX_USE_CONSTEXPR int max_exponent10 = 0;
763c0a68be4Smrg
764c0a68be4Smrg      static _GLIBCXX_USE_CONSTEXPR bool has_infinity = false;
765c0a68be4Smrg      static _GLIBCXX_USE_CONSTEXPR bool has_quiet_NaN = false;
766c0a68be4Smrg      static _GLIBCXX_USE_CONSTEXPR bool has_signaling_NaN = false;
767c0a68be4Smrg      static _GLIBCXX_USE_CONSTEXPR float_denorm_style has_denorm
768c0a68be4Smrg	= denorm_absent;
769c0a68be4Smrg      static _GLIBCXX_USE_CONSTEXPR bool has_denorm_loss = false;
770c0a68be4Smrg
771c0a68be4Smrg      static _GLIBCXX_CONSTEXPR char8_t
772c0a68be4Smrg      infinity() _GLIBCXX_USE_NOEXCEPT { return char8_t(); }
773c0a68be4Smrg
774c0a68be4Smrg      static _GLIBCXX_CONSTEXPR char8_t
775c0a68be4Smrg      quiet_NaN() _GLIBCXX_USE_NOEXCEPT { return char8_t(); }
776c0a68be4Smrg
777c0a68be4Smrg      static _GLIBCXX_CONSTEXPR char8_t
778c0a68be4Smrg      signaling_NaN() _GLIBCXX_USE_NOEXCEPT { return char8_t(); }
779c0a68be4Smrg
780c0a68be4Smrg      static _GLIBCXX_CONSTEXPR char8_t
781c0a68be4Smrg      denorm_min() _GLIBCXX_USE_NOEXCEPT { return char8_t(); }
782c0a68be4Smrg
783c0a68be4Smrg      static _GLIBCXX_USE_CONSTEXPR bool is_iec559 = false;
784c0a68be4Smrg      static _GLIBCXX_USE_CONSTEXPR bool is_bounded = true;
785c0a68be4Smrg      static _GLIBCXX_USE_CONSTEXPR bool is_modulo = !is_signed;
786c0a68be4Smrg
787c0a68be4Smrg      static _GLIBCXX_USE_CONSTEXPR bool traps = __glibcxx_integral_traps;
788c0a68be4Smrg      static _GLIBCXX_USE_CONSTEXPR bool tinyness_before = false;
789c0a68be4Smrg      static _GLIBCXX_USE_CONSTEXPR float_round_style round_style
790c0a68be4Smrg	= round_toward_zero;
791c0a68be4Smrg    };
792c0a68be4Smrg#endif
793c0a68be4Smrg
7941debfc3dSmrg#if __cplusplus >= 201103L
7951debfc3dSmrg  /// numeric_limits<char16_t> specialization.
7961debfc3dSmrg  template<>
7971debfc3dSmrg    struct numeric_limits<char16_t>
7981debfc3dSmrg    {
7991debfc3dSmrg      static constexpr bool is_specialized = true;
8001debfc3dSmrg
8011debfc3dSmrg      static constexpr char16_t
8021debfc3dSmrg      min() noexcept { return __glibcxx_min (char16_t); }
8031debfc3dSmrg
8041debfc3dSmrg      static constexpr char16_t
8051debfc3dSmrg      max() noexcept { return __glibcxx_max (char16_t); }
8061debfc3dSmrg
8071debfc3dSmrg      static constexpr char16_t
8081debfc3dSmrg      lowest() noexcept { return min(); }
8091debfc3dSmrg
8101debfc3dSmrg      static constexpr int digits = __glibcxx_digits (char16_t);
8111debfc3dSmrg      static constexpr int digits10 = __glibcxx_digits10 (char16_t);
8121debfc3dSmrg      static constexpr int max_digits10 = 0;
8131debfc3dSmrg      static constexpr bool is_signed = __glibcxx_signed (char16_t);
8141debfc3dSmrg      static constexpr bool is_integer = true;
8151debfc3dSmrg      static constexpr bool is_exact = true;
8161debfc3dSmrg      static constexpr int radix = 2;
8171debfc3dSmrg
8181debfc3dSmrg      static constexpr char16_t
8191debfc3dSmrg      epsilon() noexcept { return 0; }
8201debfc3dSmrg
8211debfc3dSmrg      static constexpr char16_t
8221debfc3dSmrg      round_error() noexcept { return 0; }
8231debfc3dSmrg
8241debfc3dSmrg      static constexpr int min_exponent = 0;
8251debfc3dSmrg      static constexpr int min_exponent10 = 0;
8261debfc3dSmrg      static constexpr int max_exponent = 0;
8271debfc3dSmrg      static constexpr int max_exponent10 = 0;
8281debfc3dSmrg
8291debfc3dSmrg      static constexpr bool has_infinity = false;
8301debfc3dSmrg      static constexpr bool has_quiet_NaN = false;
8311debfc3dSmrg      static constexpr bool has_signaling_NaN = false;
8321debfc3dSmrg      static constexpr float_denorm_style has_denorm = denorm_absent;
8331debfc3dSmrg      static constexpr bool has_denorm_loss = false;
8341debfc3dSmrg
8351debfc3dSmrg      static constexpr char16_t
8361debfc3dSmrg      infinity() noexcept { return char16_t(); }
8371debfc3dSmrg
8381debfc3dSmrg      static constexpr char16_t
8391debfc3dSmrg      quiet_NaN() noexcept { return char16_t(); }
8401debfc3dSmrg
8411debfc3dSmrg      static constexpr char16_t
8421debfc3dSmrg      signaling_NaN() noexcept { return char16_t(); }
8431debfc3dSmrg
8441debfc3dSmrg      static constexpr char16_t
8451debfc3dSmrg      denorm_min() noexcept { return char16_t(); }
8461debfc3dSmrg
8471debfc3dSmrg      static constexpr bool is_iec559 = false;
8481debfc3dSmrg      static constexpr bool is_bounded = true;
8491debfc3dSmrg      static constexpr bool is_modulo = !is_signed;
8501debfc3dSmrg
8511debfc3dSmrg      static constexpr bool traps = __glibcxx_integral_traps;
8521debfc3dSmrg      static constexpr bool tinyness_before = false;
8531debfc3dSmrg      static constexpr float_round_style round_style = round_toward_zero;
8541debfc3dSmrg    };
8551debfc3dSmrg
8561debfc3dSmrg  /// numeric_limits<char32_t> specialization.
8571debfc3dSmrg  template<>
8581debfc3dSmrg    struct numeric_limits<char32_t>
8591debfc3dSmrg    {
8601debfc3dSmrg      static constexpr bool is_specialized = true;
8611debfc3dSmrg
8621debfc3dSmrg      static constexpr char32_t
8631debfc3dSmrg      min() noexcept { return __glibcxx_min (char32_t); }
8641debfc3dSmrg
8651debfc3dSmrg      static constexpr char32_t
8661debfc3dSmrg      max() noexcept { return __glibcxx_max (char32_t); }
8671debfc3dSmrg
8681debfc3dSmrg      static constexpr char32_t
8691debfc3dSmrg      lowest() noexcept { return min(); }
8701debfc3dSmrg
8711debfc3dSmrg      static constexpr int digits = __glibcxx_digits (char32_t);
8721debfc3dSmrg      static constexpr int digits10 = __glibcxx_digits10 (char32_t);
8731debfc3dSmrg      static constexpr int max_digits10 = 0;
8741debfc3dSmrg      static constexpr bool is_signed = __glibcxx_signed (char32_t);
8751debfc3dSmrg      static constexpr bool is_integer = true;
8761debfc3dSmrg      static constexpr bool is_exact = true;
8771debfc3dSmrg      static constexpr int radix = 2;
8781debfc3dSmrg
8791debfc3dSmrg      static constexpr char32_t
8801debfc3dSmrg      epsilon() noexcept { return 0; }
8811debfc3dSmrg
8821debfc3dSmrg      static constexpr char32_t
8831debfc3dSmrg      round_error() noexcept { return 0; }
8841debfc3dSmrg
8851debfc3dSmrg      static constexpr int min_exponent = 0;
8861debfc3dSmrg      static constexpr int min_exponent10 = 0;
8871debfc3dSmrg      static constexpr int max_exponent = 0;
8881debfc3dSmrg      static constexpr int max_exponent10 = 0;
8891debfc3dSmrg
8901debfc3dSmrg      static constexpr bool has_infinity = false;
8911debfc3dSmrg      static constexpr bool has_quiet_NaN = false;
8921debfc3dSmrg      static constexpr bool has_signaling_NaN = false;
8931debfc3dSmrg      static constexpr float_denorm_style has_denorm = denorm_absent;
8941debfc3dSmrg      static constexpr bool has_denorm_loss = false;
8951debfc3dSmrg
8961debfc3dSmrg      static constexpr char32_t
8971debfc3dSmrg      infinity() noexcept { return char32_t(); }
8981debfc3dSmrg
8991debfc3dSmrg      static constexpr char32_t
9001debfc3dSmrg      quiet_NaN() noexcept { return char32_t(); }
9011debfc3dSmrg
9021debfc3dSmrg      static constexpr char32_t
9031debfc3dSmrg      signaling_NaN() noexcept { return char32_t(); }
9041debfc3dSmrg
9051debfc3dSmrg      static constexpr char32_t
9061debfc3dSmrg      denorm_min() noexcept { return char32_t(); }
9071debfc3dSmrg
9081debfc3dSmrg      static constexpr bool is_iec559 = false;
9091debfc3dSmrg      static constexpr bool is_bounded = true;
9101debfc3dSmrg      static constexpr bool is_modulo = !is_signed;
9111debfc3dSmrg
9121debfc3dSmrg      static constexpr bool traps = __glibcxx_integral_traps;
9131debfc3dSmrg      static constexpr bool tinyness_before = false;
9141debfc3dSmrg      static constexpr float_round_style round_style = round_toward_zero;
9151debfc3dSmrg    };
9161debfc3dSmrg#endif
9171debfc3dSmrg
9181debfc3dSmrg  /// numeric_limits<short> specialization.
9191debfc3dSmrg  template<>
9201debfc3dSmrg    struct numeric_limits<short>
9211debfc3dSmrg    {
9221debfc3dSmrg      static _GLIBCXX_USE_CONSTEXPR bool is_specialized = true;
9231debfc3dSmrg
9241debfc3dSmrg      static _GLIBCXX_CONSTEXPR short
9251debfc3dSmrg      min() _GLIBCXX_USE_NOEXCEPT { return -__SHRT_MAX__ - 1; }
9261debfc3dSmrg
9271debfc3dSmrg      static _GLIBCXX_CONSTEXPR short
9281debfc3dSmrg      max() _GLIBCXX_USE_NOEXCEPT { return __SHRT_MAX__; }
9291debfc3dSmrg
9301debfc3dSmrg#if __cplusplus >= 201103L
9311debfc3dSmrg      static constexpr short
9321debfc3dSmrg      lowest() noexcept { return min(); }
9331debfc3dSmrg#endif
9341debfc3dSmrg
9351debfc3dSmrg      static _GLIBCXX_USE_CONSTEXPR int digits = __glibcxx_digits (short);
9361debfc3dSmrg      static _GLIBCXX_USE_CONSTEXPR int digits10 = __glibcxx_digits10 (short);
9371debfc3dSmrg#if __cplusplus >= 201103L
9381debfc3dSmrg      static constexpr int max_digits10 = 0;
9391debfc3dSmrg#endif
9401debfc3dSmrg      static _GLIBCXX_USE_CONSTEXPR bool is_signed = true;
9411debfc3dSmrg      static _GLIBCXX_USE_CONSTEXPR bool is_integer = true;
9421debfc3dSmrg      static _GLIBCXX_USE_CONSTEXPR bool is_exact = true;
9431debfc3dSmrg      static _GLIBCXX_USE_CONSTEXPR int radix = 2;
9441debfc3dSmrg
9451debfc3dSmrg      static _GLIBCXX_CONSTEXPR short
9461debfc3dSmrg      epsilon() _GLIBCXX_USE_NOEXCEPT { return 0; }
9471debfc3dSmrg
9481debfc3dSmrg      static _GLIBCXX_CONSTEXPR short
9491debfc3dSmrg      round_error() _GLIBCXX_USE_NOEXCEPT { return 0; }
9501debfc3dSmrg
9511debfc3dSmrg      static _GLIBCXX_USE_CONSTEXPR int min_exponent = 0;
9521debfc3dSmrg      static _GLIBCXX_USE_CONSTEXPR int min_exponent10 = 0;
9531debfc3dSmrg      static _GLIBCXX_USE_CONSTEXPR int max_exponent = 0;
9541debfc3dSmrg      static _GLIBCXX_USE_CONSTEXPR int max_exponent10 = 0;
9551debfc3dSmrg
9561debfc3dSmrg      static _GLIBCXX_USE_CONSTEXPR bool has_infinity = false;
9571debfc3dSmrg      static _GLIBCXX_USE_CONSTEXPR bool has_quiet_NaN = false;
9581debfc3dSmrg      static _GLIBCXX_USE_CONSTEXPR bool has_signaling_NaN = false;
9591debfc3dSmrg      static _GLIBCXX_USE_CONSTEXPR float_denorm_style has_denorm
9601debfc3dSmrg       = denorm_absent;
9611debfc3dSmrg      static _GLIBCXX_USE_CONSTEXPR bool has_denorm_loss = false;
9621debfc3dSmrg
9631debfc3dSmrg      static _GLIBCXX_CONSTEXPR short
9641debfc3dSmrg      infinity() _GLIBCXX_USE_NOEXCEPT { return short(); }
9651debfc3dSmrg
9661debfc3dSmrg      static _GLIBCXX_CONSTEXPR short
9671debfc3dSmrg      quiet_NaN() _GLIBCXX_USE_NOEXCEPT { return short(); }
9681debfc3dSmrg
9691debfc3dSmrg      static _GLIBCXX_CONSTEXPR short
9701debfc3dSmrg      signaling_NaN() _GLIBCXX_USE_NOEXCEPT { return short(); }
9711debfc3dSmrg
9721debfc3dSmrg      static _GLIBCXX_CONSTEXPR short
9731debfc3dSmrg      denorm_min() _GLIBCXX_USE_NOEXCEPT { return short(); }
9741debfc3dSmrg
9751debfc3dSmrg      static _GLIBCXX_USE_CONSTEXPR bool is_iec559 = false;
9761debfc3dSmrg      static _GLIBCXX_USE_CONSTEXPR bool is_bounded = true;
9771debfc3dSmrg      static _GLIBCXX_USE_CONSTEXPR bool is_modulo = false;
9781debfc3dSmrg
9791debfc3dSmrg      static _GLIBCXX_USE_CONSTEXPR bool traps = __glibcxx_integral_traps;
9801debfc3dSmrg      static _GLIBCXX_USE_CONSTEXPR bool tinyness_before = false;
9811debfc3dSmrg      static _GLIBCXX_USE_CONSTEXPR float_round_style round_style
9821debfc3dSmrg       = round_toward_zero;
9831debfc3dSmrg    };
9841debfc3dSmrg
9851debfc3dSmrg  /// numeric_limits<unsigned short> specialization.
9861debfc3dSmrg  template<>
9871debfc3dSmrg    struct numeric_limits<unsigned short>
9881debfc3dSmrg    {
9891debfc3dSmrg      static _GLIBCXX_USE_CONSTEXPR bool is_specialized = true;
9901debfc3dSmrg
9911debfc3dSmrg      static _GLIBCXX_CONSTEXPR unsigned short
9921debfc3dSmrg      min() _GLIBCXX_USE_NOEXCEPT { return 0; }
9931debfc3dSmrg
9941debfc3dSmrg      static _GLIBCXX_CONSTEXPR unsigned short
9951debfc3dSmrg      max() _GLIBCXX_USE_NOEXCEPT { return __SHRT_MAX__ * 2U + 1; }
9961debfc3dSmrg
9971debfc3dSmrg#if __cplusplus >= 201103L
9981debfc3dSmrg      static constexpr unsigned short
9991debfc3dSmrg      lowest() noexcept { return min(); }
10001debfc3dSmrg#endif
10011debfc3dSmrg
10021debfc3dSmrg      static _GLIBCXX_USE_CONSTEXPR int digits
10031debfc3dSmrg       = __glibcxx_digits (unsigned short);
10041debfc3dSmrg      static _GLIBCXX_USE_CONSTEXPR int digits10
10051debfc3dSmrg       = __glibcxx_digits10 (unsigned short);
10061debfc3dSmrg#if __cplusplus >= 201103L
10071debfc3dSmrg      static constexpr int max_digits10 = 0;
10081debfc3dSmrg#endif
10091debfc3dSmrg      static _GLIBCXX_USE_CONSTEXPR bool is_signed = false;
10101debfc3dSmrg      static _GLIBCXX_USE_CONSTEXPR bool is_integer = true;
10111debfc3dSmrg      static _GLIBCXX_USE_CONSTEXPR bool is_exact = true;
10121debfc3dSmrg      static _GLIBCXX_USE_CONSTEXPR int radix = 2;
10131debfc3dSmrg
10141debfc3dSmrg      static _GLIBCXX_CONSTEXPR unsigned short
10151debfc3dSmrg      epsilon() _GLIBCXX_USE_NOEXCEPT { return 0; }
10161debfc3dSmrg
10171debfc3dSmrg      static _GLIBCXX_CONSTEXPR unsigned short
10181debfc3dSmrg      round_error() _GLIBCXX_USE_NOEXCEPT { return 0; }
10191debfc3dSmrg
10201debfc3dSmrg      static _GLIBCXX_USE_CONSTEXPR int min_exponent = 0;
10211debfc3dSmrg      static _GLIBCXX_USE_CONSTEXPR int min_exponent10 = 0;
10221debfc3dSmrg      static _GLIBCXX_USE_CONSTEXPR int max_exponent = 0;
10231debfc3dSmrg      static _GLIBCXX_USE_CONSTEXPR int max_exponent10 = 0;
10241debfc3dSmrg
10251debfc3dSmrg      static _GLIBCXX_USE_CONSTEXPR bool has_infinity = false;
10261debfc3dSmrg      static _GLIBCXX_USE_CONSTEXPR bool has_quiet_NaN = false;
10271debfc3dSmrg      static _GLIBCXX_USE_CONSTEXPR bool has_signaling_NaN = false;
10281debfc3dSmrg      static _GLIBCXX_USE_CONSTEXPR float_denorm_style has_denorm
10291debfc3dSmrg       = denorm_absent;
10301debfc3dSmrg      static _GLIBCXX_USE_CONSTEXPR bool has_denorm_loss = false;
10311debfc3dSmrg
10321debfc3dSmrg      static _GLIBCXX_CONSTEXPR unsigned short
10331debfc3dSmrg      infinity() _GLIBCXX_USE_NOEXCEPT
10341debfc3dSmrg      { return static_cast<unsigned short>(0); }
10351debfc3dSmrg
10361debfc3dSmrg      static _GLIBCXX_CONSTEXPR unsigned short
10371debfc3dSmrg      quiet_NaN() _GLIBCXX_USE_NOEXCEPT
10381debfc3dSmrg      { return static_cast<unsigned short>(0); }
10391debfc3dSmrg
10401debfc3dSmrg      static _GLIBCXX_CONSTEXPR unsigned short
10411debfc3dSmrg      signaling_NaN() _GLIBCXX_USE_NOEXCEPT
10421debfc3dSmrg      { return static_cast<unsigned short>(0); }
10431debfc3dSmrg
10441debfc3dSmrg      static _GLIBCXX_CONSTEXPR unsigned short
10451debfc3dSmrg      denorm_min() _GLIBCXX_USE_NOEXCEPT
10461debfc3dSmrg      { return static_cast<unsigned short>(0); }
10471debfc3dSmrg
10481debfc3dSmrg      static _GLIBCXX_USE_CONSTEXPR bool is_iec559 = false;
10491debfc3dSmrg      static _GLIBCXX_USE_CONSTEXPR bool is_bounded = true;
10501debfc3dSmrg      static _GLIBCXX_USE_CONSTEXPR bool is_modulo = true;
10511debfc3dSmrg
10521debfc3dSmrg      static _GLIBCXX_USE_CONSTEXPR bool traps = __glibcxx_integral_traps;
10531debfc3dSmrg      static _GLIBCXX_USE_CONSTEXPR bool tinyness_before = false;
10541debfc3dSmrg      static _GLIBCXX_USE_CONSTEXPR float_round_style round_style
10551debfc3dSmrg       = round_toward_zero;
10561debfc3dSmrg    };
10571debfc3dSmrg
10581debfc3dSmrg  /// numeric_limits<int> specialization.
10591debfc3dSmrg  template<>
10601debfc3dSmrg    struct numeric_limits<int>
10611debfc3dSmrg    {
10621debfc3dSmrg      static _GLIBCXX_USE_CONSTEXPR bool is_specialized = true;
10631debfc3dSmrg
10641debfc3dSmrg      static _GLIBCXX_CONSTEXPR int
10651debfc3dSmrg      min() _GLIBCXX_USE_NOEXCEPT { return -__INT_MAX__ - 1; }
10661debfc3dSmrg
10671debfc3dSmrg      static _GLIBCXX_CONSTEXPR int
10681debfc3dSmrg      max() _GLIBCXX_USE_NOEXCEPT { return __INT_MAX__; }
10691debfc3dSmrg
10701debfc3dSmrg#if __cplusplus >= 201103L
10711debfc3dSmrg      static constexpr int
10721debfc3dSmrg      lowest() noexcept { return min(); }
10731debfc3dSmrg#endif
10741debfc3dSmrg
10751debfc3dSmrg      static _GLIBCXX_USE_CONSTEXPR int digits = __glibcxx_digits (int);
10761debfc3dSmrg      static _GLIBCXX_USE_CONSTEXPR int digits10 = __glibcxx_digits10 (int);
10771debfc3dSmrg#if __cplusplus >= 201103L
10781debfc3dSmrg      static constexpr int max_digits10 = 0;
10791debfc3dSmrg#endif
10801debfc3dSmrg      static _GLIBCXX_USE_CONSTEXPR bool is_signed = true;
10811debfc3dSmrg      static _GLIBCXX_USE_CONSTEXPR bool is_integer = true;
10821debfc3dSmrg      static _GLIBCXX_USE_CONSTEXPR bool is_exact = true;
10831debfc3dSmrg      static _GLIBCXX_USE_CONSTEXPR int radix = 2;
10841debfc3dSmrg
10851debfc3dSmrg      static _GLIBCXX_CONSTEXPR int
10861debfc3dSmrg      epsilon() _GLIBCXX_USE_NOEXCEPT { return 0; }
10871debfc3dSmrg
10881debfc3dSmrg      static _GLIBCXX_CONSTEXPR int
10891debfc3dSmrg      round_error() _GLIBCXX_USE_NOEXCEPT { return 0; }
10901debfc3dSmrg
10911debfc3dSmrg      static _GLIBCXX_USE_CONSTEXPR int min_exponent = 0;
10921debfc3dSmrg      static _GLIBCXX_USE_CONSTEXPR int min_exponent10 = 0;
10931debfc3dSmrg      static _GLIBCXX_USE_CONSTEXPR int max_exponent = 0;
10941debfc3dSmrg      static _GLIBCXX_USE_CONSTEXPR int max_exponent10 = 0;
10951debfc3dSmrg
10961debfc3dSmrg      static _GLIBCXX_USE_CONSTEXPR bool has_infinity = false;
10971debfc3dSmrg      static _GLIBCXX_USE_CONSTEXPR bool has_quiet_NaN = false;
10981debfc3dSmrg      static _GLIBCXX_USE_CONSTEXPR bool has_signaling_NaN = false;
10991debfc3dSmrg      static _GLIBCXX_USE_CONSTEXPR float_denorm_style has_denorm
11001debfc3dSmrg       = denorm_absent;
11011debfc3dSmrg      static _GLIBCXX_USE_CONSTEXPR bool has_denorm_loss = false;
11021debfc3dSmrg
11031debfc3dSmrg      static _GLIBCXX_CONSTEXPR int
11041debfc3dSmrg      infinity() _GLIBCXX_USE_NOEXCEPT { return static_cast<int>(0); }
11051debfc3dSmrg
11061debfc3dSmrg      static _GLIBCXX_CONSTEXPR int
11071debfc3dSmrg      quiet_NaN() _GLIBCXX_USE_NOEXCEPT { return static_cast<int>(0); }
11081debfc3dSmrg
11091debfc3dSmrg      static _GLIBCXX_CONSTEXPR int
11101debfc3dSmrg      signaling_NaN() _GLIBCXX_USE_NOEXCEPT { return static_cast<int>(0); }
11111debfc3dSmrg
11121debfc3dSmrg      static _GLIBCXX_CONSTEXPR int
11131debfc3dSmrg      denorm_min() _GLIBCXX_USE_NOEXCEPT { return static_cast<int>(0); }
11141debfc3dSmrg
11151debfc3dSmrg      static _GLIBCXX_USE_CONSTEXPR bool is_iec559 = false;
11161debfc3dSmrg      static _GLIBCXX_USE_CONSTEXPR bool is_bounded = true;
11171debfc3dSmrg      static _GLIBCXX_USE_CONSTEXPR bool is_modulo = false;
11181debfc3dSmrg
11191debfc3dSmrg      static _GLIBCXX_USE_CONSTEXPR bool traps = __glibcxx_integral_traps;
11201debfc3dSmrg      static _GLIBCXX_USE_CONSTEXPR bool tinyness_before = false;
11211debfc3dSmrg      static _GLIBCXX_USE_CONSTEXPR float_round_style round_style
11221debfc3dSmrg       = round_toward_zero;
11231debfc3dSmrg    };
11241debfc3dSmrg
11251debfc3dSmrg  /// numeric_limits<unsigned int> specialization.
11261debfc3dSmrg  template<>
11271debfc3dSmrg    struct numeric_limits<unsigned int>
11281debfc3dSmrg    {
11291debfc3dSmrg      static _GLIBCXX_USE_CONSTEXPR bool is_specialized = true;
11301debfc3dSmrg
11311debfc3dSmrg      static _GLIBCXX_CONSTEXPR unsigned int
11321debfc3dSmrg      min() _GLIBCXX_USE_NOEXCEPT { return 0; }
11331debfc3dSmrg
11341debfc3dSmrg      static _GLIBCXX_CONSTEXPR unsigned int
11351debfc3dSmrg      max() _GLIBCXX_USE_NOEXCEPT { return __INT_MAX__ * 2U + 1; }
11361debfc3dSmrg
11371debfc3dSmrg#if __cplusplus >= 201103L
11381debfc3dSmrg      static constexpr unsigned int
11391debfc3dSmrg      lowest() noexcept { return min(); }
11401debfc3dSmrg#endif
11411debfc3dSmrg
11421debfc3dSmrg      static _GLIBCXX_USE_CONSTEXPR int digits
11431debfc3dSmrg       = __glibcxx_digits (unsigned int);
11441debfc3dSmrg      static _GLIBCXX_USE_CONSTEXPR int digits10
11451debfc3dSmrg       = __glibcxx_digits10 (unsigned int);
11461debfc3dSmrg#if __cplusplus >= 201103L
11471debfc3dSmrg      static constexpr int max_digits10 = 0;
11481debfc3dSmrg#endif
11491debfc3dSmrg      static _GLIBCXX_USE_CONSTEXPR bool is_signed = false;
11501debfc3dSmrg      static _GLIBCXX_USE_CONSTEXPR bool is_integer = true;
11511debfc3dSmrg      static _GLIBCXX_USE_CONSTEXPR bool is_exact = true;
11521debfc3dSmrg      static _GLIBCXX_USE_CONSTEXPR int radix = 2;
11531debfc3dSmrg
11541debfc3dSmrg      static _GLIBCXX_CONSTEXPR unsigned int
11551debfc3dSmrg      epsilon() _GLIBCXX_USE_NOEXCEPT { return 0; }
11561debfc3dSmrg
11571debfc3dSmrg      static _GLIBCXX_CONSTEXPR unsigned int
11581debfc3dSmrg      round_error() _GLIBCXX_USE_NOEXCEPT { return 0; }
11591debfc3dSmrg
11601debfc3dSmrg      static _GLIBCXX_USE_CONSTEXPR int min_exponent = 0;
11611debfc3dSmrg      static _GLIBCXX_USE_CONSTEXPR int min_exponent10 = 0;
11621debfc3dSmrg      static _GLIBCXX_USE_CONSTEXPR int max_exponent = 0;
11631debfc3dSmrg      static _GLIBCXX_USE_CONSTEXPR int max_exponent10 = 0;
11641debfc3dSmrg
11651debfc3dSmrg      static _GLIBCXX_USE_CONSTEXPR bool has_infinity = false;
11661debfc3dSmrg      static _GLIBCXX_USE_CONSTEXPR bool has_quiet_NaN = false;
11671debfc3dSmrg      static _GLIBCXX_USE_CONSTEXPR bool has_signaling_NaN = false;
11681debfc3dSmrg      static _GLIBCXX_USE_CONSTEXPR float_denorm_style has_denorm
11691debfc3dSmrg       = denorm_absent;
11701debfc3dSmrg      static _GLIBCXX_USE_CONSTEXPR bool has_denorm_loss = false;
11711debfc3dSmrg
11721debfc3dSmrg      static _GLIBCXX_CONSTEXPR unsigned int
11731debfc3dSmrg      infinity() _GLIBCXX_USE_NOEXCEPT { return static_cast<unsigned int>(0); }
11741debfc3dSmrg
11751debfc3dSmrg      static _GLIBCXX_CONSTEXPR unsigned int
11761debfc3dSmrg      quiet_NaN() _GLIBCXX_USE_NOEXCEPT
11771debfc3dSmrg      { return static_cast<unsigned int>(0); }
11781debfc3dSmrg
11791debfc3dSmrg      static _GLIBCXX_CONSTEXPR unsigned int
11801debfc3dSmrg      signaling_NaN() _GLIBCXX_USE_NOEXCEPT
11811debfc3dSmrg      { return static_cast<unsigned int>(0); }
11821debfc3dSmrg
11831debfc3dSmrg      static _GLIBCXX_CONSTEXPR unsigned int
11841debfc3dSmrg      denorm_min() _GLIBCXX_USE_NOEXCEPT
11851debfc3dSmrg      { return static_cast<unsigned int>(0); }
11861debfc3dSmrg
11871debfc3dSmrg      static _GLIBCXX_USE_CONSTEXPR bool is_iec559 = false;
11881debfc3dSmrg      static _GLIBCXX_USE_CONSTEXPR bool is_bounded = true;
11891debfc3dSmrg      static _GLIBCXX_USE_CONSTEXPR bool is_modulo = true;
11901debfc3dSmrg
11911debfc3dSmrg      static _GLIBCXX_USE_CONSTEXPR bool traps = __glibcxx_integral_traps;
11921debfc3dSmrg      static _GLIBCXX_USE_CONSTEXPR bool tinyness_before = false;
11931debfc3dSmrg      static _GLIBCXX_USE_CONSTEXPR float_round_style round_style
11941debfc3dSmrg       = round_toward_zero;
11951debfc3dSmrg    };
11961debfc3dSmrg
11971debfc3dSmrg  /// numeric_limits<long> specialization.
11981debfc3dSmrg  template<>
11991debfc3dSmrg    struct numeric_limits<long>
12001debfc3dSmrg    {
12011debfc3dSmrg      static _GLIBCXX_USE_CONSTEXPR bool is_specialized = true;
12021debfc3dSmrg
12031debfc3dSmrg      static _GLIBCXX_CONSTEXPR long
12041debfc3dSmrg      min() _GLIBCXX_USE_NOEXCEPT { return -__LONG_MAX__ - 1; }
12051debfc3dSmrg
12061debfc3dSmrg      static _GLIBCXX_CONSTEXPR long
12071debfc3dSmrg      max() _GLIBCXX_USE_NOEXCEPT { return __LONG_MAX__; }
12081debfc3dSmrg
12091debfc3dSmrg#if __cplusplus >= 201103L
12101debfc3dSmrg      static constexpr long
12111debfc3dSmrg      lowest() noexcept { return min(); }
12121debfc3dSmrg#endif
12131debfc3dSmrg
12141debfc3dSmrg      static _GLIBCXX_USE_CONSTEXPR int digits = __glibcxx_digits (long);
12151debfc3dSmrg      static _GLIBCXX_USE_CONSTEXPR int digits10 = __glibcxx_digits10 (long);
12161debfc3dSmrg#if __cplusplus >= 201103L
12171debfc3dSmrg      static constexpr int max_digits10 = 0;
12181debfc3dSmrg#endif
12191debfc3dSmrg      static _GLIBCXX_USE_CONSTEXPR bool is_signed = true;
12201debfc3dSmrg      static _GLIBCXX_USE_CONSTEXPR bool is_integer = true;
12211debfc3dSmrg      static _GLIBCXX_USE_CONSTEXPR bool is_exact = true;
12221debfc3dSmrg      static _GLIBCXX_USE_CONSTEXPR int radix = 2;
12231debfc3dSmrg
12241debfc3dSmrg      static _GLIBCXX_CONSTEXPR long
12251debfc3dSmrg      epsilon() _GLIBCXX_USE_NOEXCEPT { return 0; }
12261debfc3dSmrg
12271debfc3dSmrg      static _GLIBCXX_CONSTEXPR long
12281debfc3dSmrg      round_error() _GLIBCXX_USE_NOEXCEPT { return 0; }
12291debfc3dSmrg
12301debfc3dSmrg      static _GLIBCXX_USE_CONSTEXPR int min_exponent = 0;
12311debfc3dSmrg      static _GLIBCXX_USE_CONSTEXPR int min_exponent10 = 0;
12321debfc3dSmrg      static _GLIBCXX_USE_CONSTEXPR int max_exponent = 0;
12331debfc3dSmrg      static _GLIBCXX_USE_CONSTEXPR int max_exponent10 = 0;
12341debfc3dSmrg
12351debfc3dSmrg      static _GLIBCXX_USE_CONSTEXPR bool has_infinity = false;
12361debfc3dSmrg      static _GLIBCXX_USE_CONSTEXPR bool has_quiet_NaN = false;
12371debfc3dSmrg      static _GLIBCXX_USE_CONSTEXPR bool has_signaling_NaN = false;
12381debfc3dSmrg      static _GLIBCXX_USE_CONSTEXPR float_denorm_style has_denorm
12391debfc3dSmrg       = denorm_absent;
12401debfc3dSmrg      static _GLIBCXX_USE_CONSTEXPR bool has_denorm_loss = false;
12411debfc3dSmrg
12421debfc3dSmrg      static _GLIBCXX_CONSTEXPR long
12431debfc3dSmrg      infinity() _GLIBCXX_USE_NOEXCEPT { return static_cast<long>(0); }
12441debfc3dSmrg
12451debfc3dSmrg      static _GLIBCXX_CONSTEXPR long
12461debfc3dSmrg      quiet_NaN() _GLIBCXX_USE_NOEXCEPT { return static_cast<long>(0); }
12471debfc3dSmrg
12481debfc3dSmrg      static _GLIBCXX_CONSTEXPR long
12491debfc3dSmrg      signaling_NaN() _GLIBCXX_USE_NOEXCEPT { return static_cast<long>(0); }
12501debfc3dSmrg
12511debfc3dSmrg      static _GLIBCXX_CONSTEXPR long
12521debfc3dSmrg      denorm_min() _GLIBCXX_USE_NOEXCEPT { return static_cast<long>(0); }
12531debfc3dSmrg
12541debfc3dSmrg      static _GLIBCXX_USE_CONSTEXPR bool is_iec559 = false;
12551debfc3dSmrg      static _GLIBCXX_USE_CONSTEXPR bool is_bounded = true;
12561debfc3dSmrg      static _GLIBCXX_USE_CONSTEXPR bool is_modulo = false;
12571debfc3dSmrg
12581debfc3dSmrg      static _GLIBCXX_USE_CONSTEXPR bool traps = __glibcxx_integral_traps;
12591debfc3dSmrg      static _GLIBCXX_USE_CONSTEXPR bool tinyness_before = false;
12601debfc3dSmrg      static _GLIBCXX_USE_CONSTEXPR float_round_style round_style
12611debfc3dSmrg       = round_toward_zero;
12621debfc3dSmrg    };
12631debfc3dSmrg
12641debfc3dSmrg  /// numeric_limits<unsigned long> specialization.
12651debfc3dSmrg  template<>
12661debfc3dSmrg    struct numeric_limits<unsigned long>
12671debfc3dSmrg    {
12681debfc3dSmrg      static _GLIBCXX_USE_CONSTEXPR bool is_specialized = true;
12691debfc3dSmrg
12701debfc3dSmrg      static _GLIBCXX_CONSTEXPR unsigned long
12711debfc3dSmrg      min() _GLIBCXX_USE_NOEXCEPT { return 0; }
12721debfc3dSmrg
12731debfc3dSmrg      static _GLIBCXX_CONSTEXPR unsigned long
12741debfc3dSmrg      max() _GLIBCXX_USE_NOEXCEPT { return __LONG_MAX__ * 2UL + 1; }
12751debfc3dSmrg
12761debfc3dSmrg#if __cplusplus >= 201103L
12771debfc3dSmrg      static constexpr unsigned long
12781debfc3dSmrg      lowest() noexcept { return min(); }
12791debfc3dSmrg#endif
12801debfc3dSmrg
12811debfc3dSmrg      static _GLIBCXX_USE_CONSTEXPR int digits
12821debfc3dSmrg       = __glibcxx_digits (unsigned long);
12831debfc3dSmrg      static _GLIBCXX_USE_CONSTEXPR int digits10
12841debfc3dSmrg       = __glibcxx_digits10 (unsigned long);
12851debfc3dSmrg#if __cplusplus >= 201103L
12861debfc3dSmrg      static constexpr int max_digits10 = 0;
12871debfc3dSmrg#endif
12881debfc3dSmrg      static _GLIBCXX_USE_CONSTEXPR bool is_signed = false;
12891debfc3dSmrg      static _GLIBCXX_USE_CONSTEXPR bool is_integer = true;
12901debfc3dSmrg      static _GLIBCXX_USE_CONSTEXPR bool is_exact = true;
12911debfc3dSmrg      static _GLIBCXX_USE_CONSTEXPR int radix = 2;
12921debfc3dSmrg
12931debfc3dSmrg      static _GLIBCXX_CONSTEXPR unsigned long
12941debfc3dSmrg      epsilon() _GLIBCXX_USE_NOEXCEPT { return 0; }
12951debfc3dSmrg
12961debfc3dSmrg      static _GLIBCXX_CONSTEXPR unsigned long
12971debfc3dSmrg      round_error() _GLIBCXX_USE_NOEXCEPT { return 0; }
12981debfc3dSmrg
12991debfc3dSmrg      static _GLIBCXX_USE_CONSTEXPR int min_exponent = 0;
13001debfc3dSmrg      static _GLIBCXX_USE_CONSTEXPR int min_exponent10 = 0;
13011debfc3dSmrg      static _GLIBCXX_USE_CONSTEXPR int max_exponent = 0;
13021debfc3dSmrg      static _GLIBCXX_USE_CONSTEXPR int max_exponent10 = 0;
13031debfc3dSmrg
13041debfc3dSmrg      static _GLIBCXX_USE_CONSTEXPR bool has_infinity = false;
13051debfc3dSmrg      static _GLIBCXX_USE_CONSTEXPR bool has_quiet_NaN = false;
13061debfc3dSmrg      static _GLIBCXX_USE_CONSTEXPR bool has_signaling_NaN = false;
13071debfc3dSmrg      static _GLIBCXX_USE_CONSTEXPR float_denorm_style has_denorm
13081debfc3dSmrg       = denorm_absent;
13091debfc3dSmrg      static _GLIBCXX_USE_CONSTEXPR bool has_denorm_loss = false;
13101debfc3dSmrg
13111debfc3dSmrg      static _GLIBCXX_CONSTEXPR unsigned long
13121debfc3dSmrg      infinity() _GLIBCXX_USE_NOEXCEPT
13131debfc3dSmrg      { return static_cast<unsigned long>(0); }
13141debfc3dSmrg
13151debfc3dSmrg      static _GLIBCXX_CONSTEXPR unsigned long
13161debfc3dSmrg      quiet_NaN() _GLIBCXX_USE_NOEXCEPT
13171debfc3dSmrg      { return static_cast<unsigned long>(0); }
13181debfc3dSmrg
13191debfc3dSmrg      static _GLIBCXX_CONSTEXPR unsigned long
13201debfc3dSmrg      signaling_NaN() _GLIBCXX_USE_NOEXCEPT
13211debfc3dSmrg      { return static_cast<unsigned long>(0); }
13221debfc3dSmrg
13231debfc3dSmrg      static _GLIBCXX_CONSTEXPR unsigned long
13241debfc3dSmrg      denorm_min() _GLIBCXX_USE_NOEXCEPT
13251debfc3dSmrg      { return static_cast<unsigned long>(0); }
13261debfc3dSmrg
13271debfc3dSmrg      static _GLIBCXX_USE_CONSTEXPR bool is_iec559 = false;
13281debfc3dSmrg      static _GLIBCXX_USE_CONSTEXPR bool is_bounded = true;
13291debfc3dSmrg      static _GLIBCXX_USE_CONSTEXPR bool is_modulo = true;
13301debfc3dSmrg
13311debfc3dSmrg      static _GLIBCXX_USE_CONSTEXPR bool traps = __glibcxx_integral_traps;
13321debfc3dSmrg      static _GLIBCXX_USE_CONSTEXPR bool tinyness_before = false;
13331debfc3dSmrg      static _GLIBCXX_USE_CONSTEXPR float_round_style round_style
13341debfc3dSmrg       = round_toward_zero;
13351debfc3dSmrg    };
13361debfc3dSmrg
13371debfc3dSmrg  /// numeric_limits<long long> specialization.
13381debfc3dSmrg  template<>
13391debfc3dSmrg    struct numeric_limits<long long>
13401debfc3dSmrg    {
13411debfc3dSmrg      static _GLIBCXX_USE_CONSTEXPR bool is_specialized = true;
13421debfc3dSmrg
13431debfc3dSmrg      static _GLIBCXX_CONSTEXPR long long
13441debfc3dSmrg      min() _GLIBCXX_USE_NOEXCEPT { return -__LONG_LONG_MAX__ - 1; }
13451debfc3dSmrg
13461debfc3dSmrg      static _GLIBCXX_CONSTEXPR long long
13471debfc3dSmrg      max() _GLIBCXX_USE_NOEXCEPT { return __LONG_LONG_MAX__; }
13481debfc3dSmrg
13491debfc3dSmrg#if __cplusplus >= 201103L
13501debfc3dSmrg      static constexpr long long
13511debfc3dSmrg      lowest() noexcept { return min(); }
13521debfc3dSmrg#endif
13531debfc3dSmrg
13541debfc3dSmrg      static _GLIBCXX_USE_CONSTEXPR int digits
13551debfc3dSmrg       = __glibcxx_digits (long long);
13561debfc3dSmrg      static _GLIBCXX_USE_CONSTEXPR int digits10
13571debfc3dSmrg       = __glibcxx_digits10 (long long);
13581debfc3dSmrg#if __cplusplus >= 201103L
13591debfc3dSmrg      static constexpr int max_digits10 = 0;
13601debfc3dSmrg#endif
13611debfc3dSmrg      static _GLIBCXX_USE_CONSTEXPR bool is_signed = true;
13621debfc3dSmrg      static _GLIBCXX_USE_CONSTEXPR bool is_integer = true;
13631debfc3dSmrg      static _GLIBCXX_USE_CONSTEXPR bool is_exact = true;
13641debfc3dSmrg      static _GLIBCXX_USE_CONSTEXPR int radix = 2;
13651debfc3dSmrg
13661debfc3dSmrg      static _GLIBCXX_CONSTEXPR long long
13671debfc3dSmrg      epsilon() _GLIBCXX_USE_NOEXCEPT { return 0; }
13681debfc3dSmrg
13691debfc3dSmrg      static _GLIBCXX_CONSTEXPR long long
13701debfc3dSmrg      round_error() _GLIBCXX_USE_NOEXCEPT { return 0; }
13711debfc3dSmrg
13721debfc3dSmrg      static _GLIBCXX_USE_CONSTEXPR int min_exponent = 0;
13731debfc3dSmrg      static _GLIBCXX_USE_CONSTEXPR int min_exponent10 = 0;
13741debfc3dSmrg      static _GLIBCXX_USE_CONSTEXPR int max_exponent = 0;
13751debfc3dSmrg      static _GLIBCXX_USE_CONSTEXPR int max_exponent10 = 0;
13761debfc3dSmrg
13771debfc3dSmrg      static _GLIBCXX_USE_CONSTEXPR bool has_infinity = false;
13781debfc3dSmrg      static _GLIBCXX_USE_CONSTEXPR bool has_quiet_NaN = false;
13791debfc3dSmrg      static _GLIBCXX_USE_CONSTEXPR bool has_signaling_NaN = false;
13801debfc3dSmrg      static _GLIBCXX_USE_CONSTEXPR float_denorm_style has_denorm
13811debfc3dSmrg       = denorm_absent;
13821debfc3dSmrg      static _GLIBCXX_USE_CONSTEXPR bool has_denorm_loss = false;
13831debfc3dSmrg
13841debfc3dSmrg      static _GLIBCXX_CONSTEXPR long long
13851debfc3dSmrg      infinity() _GLIBCXX_USE_NOEXCEPT { return static_cast<long long>(0); }
13861debfc3dSmrg
13871debfc3dSmrg      static _GLIBCXX_CONSTEXPR long long
13881debfc3dSmrg      quiet_NaN() _GLIBCXX_USE_NOEXCEPT { return static_cast<long long>(0); }
13891debfc3dSmrg
13901debfc3dSmrg      static _GLIBCXX_CONSTEXPR long long
13911debfc3dSmrg      signaling_NaN() _GLIBCXX_USE_NOEXCEPT
13921debfc3dSmrg      { return static_cast<long long>(0); }
13931debfc3dSmrg
13941debfc3dSmrg      static _GLIBCXX_CONSTEXPR long long
13951debfc3dSmrg      denorm_min() _GLIBCXX_USE_NOEXCEPT { return static_cast<long long>(0); }
13961debfc3dSmrg
13971debfc3dSmrg      static _GLIBCXX_USE_CONSTEXPR bool is_iec559 = false;
13981debfc3dSmrg      static _GLIBCXX_USE_CONSTEXPR bool is_bounded = true;
13991debfc3dSmrg      static _GLIBCXX_USE_CONSTEXPR bool is_modulo = false;
14001debfc3dSmrg
14011debfc3dSmrg      static _GLIBCXX_USE_CONSTEXPR bool traps = __glibcxx_integral_traps;
14021debfc3dSmrg      static _GLIBCXX_USE_CONSTEXPR bool tinyness_before = false;
14031debfc3dSmrg      static _GLIBCXX_USE_CONSTEXPR float_round_style round_style
14041debfc3dSmrg       = round_toward_zero;
14051debfc3dSmrg    };
14061debfc3dSmrg
14071debfc3dSmrg  /// numeric_limits<unsigned long long> specialization.
14081debfc3dSmrg  template<>
14091debfc3dSmrg    struct numeric_limits<unsigned long long>
14101debfc3dSmrg    {
14111debfc3dSmrg      static _GLIBCXX_USE_CONSTEXPR bool is_specialized = true;
14121debfc3dSmrg
14131debfc3dSmrg      static _GLIBCXX_CONSTEXPR unsigned long long
14141debfc3dSmrg      min() _GLIBCXX_USE_NOEXCEPT { return 0; }
14151debfc3dSmrg
14161debfc3dSmrg      static _GLIBCXX_CONSTEXPR unsigned long long
14171debfc3dSmrg      max() _GLIBCXX_USE_NOEXCEPT { return __LONG_LONG_MAX__ * 2ULL + 1; }
14181debfc3dSmrg
14191debfc3dSmrg#if __cplusplus >= 201103L
14201debfc3dSmrg      static constexpr unsigned long long
14211debfc3dSmrg      lowest() noexcept { return min(); }
14221debfc3dSmrg#endif
14231debfc3dSmrg
14241debfc3dSmrg      static _GLIBCXX_USE_CONSTEXPR int digits
14251debfc3dSmrg       = __glibcxx_digits (unsigned long long);
14261debfc3dSmrg      static _GLIBCXX_USE_CONSTEXPR int digits10
14271debfc3dSmrg       = __glibcxx_digits10 (unsigned long long);
14281debfc3dSmrg#if __cplusplus >= 201103L
14291debfc3dSmrg      static constexpr int max_digits10 = 0;
14301debfc3dSmrg#endif
14311debfc3dSmrg      static _GLIBCXX_USE_CONSTEXPR bool is_signed = false;
14321debfc3dSmrg      static _GLIBCXX_USE_CONSTEXPR bool is_integer = true;
14331debfc3dSmrg      static _GLIBCXX_USE_CONSTEXPR bool is_exact = true;
14341debfc3dSmrg      static _GLIBCXX_USE_CONSTEXPR int radix = 2;
14351debfc3dSmrg
14361debfc3dSmrg      static _GLIBCXX_CONSTEXPR unsigned long long
14371debfc3dSmrg      epsilon() _GLIBCXX_USE_NOEXCEPT { return 0; }
14381debfc3dSmrg
14391debfc3dSmrg      static _GLIBCXX_CONSTEXPR unsigned long long
14401debfc3dSmrg      round_error() _GLIBCXX_USE_NOEXCEPT { return 0; }
14411debfc3dSmrg
14421debfc3dSmrg      static _GLIBCXX_USE_CONSTEXPR int min_exponent = 0;
14431debfc3dSmrg      static _GLIBCXX_USE_CONSTEXPR int min_exponent10 = 0;
14441debfc3dSmrg      static _GLIBCXX_USE_CONSTEXPR int max_exponent = 0;
14451debfc3dSmrg      static _GLIBCXX_USE_CONSTEXPR int max_exponent10 = 0;
14461debfc3dSmrg
14471debfc3dSmrg      static _GLIBCXX_USE_CONSTEXPR bool has_infinity = false;
14481debfc3dSmrg      static _GLIBCXX_USE_CONSTEXPR bool has_quiet_NaN = false;
14491debfc3dSmrg      static _GLIBCXX_USE_CONSTEXPR bool has_signaling_NaN = false;
14501debfc3dSmrg      static _GLIBCXX_USE_CONSTEXPR float_denorm_style has_denorm
14511debfc3dSmrg       = denorm_absent;
14521debfc3dSmrg      static _GLIBCXX_USE_CONSTEXPR bool has_denorm_loss = false;
14531debfc3dSmrg
14541debfc3dSmrg      static _GLIBCXX_CONSTEXPR unsigned long long
14551debfc3dSmrg      infinity() _GLIBCXX_USE_NOEXCEPT
14561debfc3dSmrg      { return static_cast<unsigned long long>(0); }
14571debfc3dSmrg
14581debfc3dSmrg      static _GLIBCXX_CONSTEXPR unsigned long long
14591debfc3dSmrg      quiet_NaN() _GLIBCXX_USE_NOEXCEPT
14601debfc3dSmrg      { return static_cast<unsigned long long>(0); }
14611debfc3dSmrg
14621debfc3dSmrg      static _GLIBCXX_CONSTEXPR unsigned long long
14631debfc3dSmrg      signaling_NaN() _GLIBCXX_USE_NOEXCEPT
14641debfc3dSmrg      { return static_cast<unsigned long long>(0); }
14651debfc3dSmrg
14661debfc3dSmrg      static _GLIBCXX_CONSTEXPR unsigned long long
14671debfc3dSmrg      denorm_min() _GLIBCXX_USE_NOEXCEPT
14681debfc3dSmrg      { return static_cast<unsigned long long>(0); }
14691debfc3dSmrg
14701debfc3dSmrg      static _GLIBCXX_USE_CONSTEXPR bool is_iec559 = false;
14711debfc3dSmrg      static _GLIBCXX_USE_CONSTEXPR bool is_bounded = true;
14721debfc3dSmrg      static _GLIBCXX_USE_CONSTEXPR bool is_modulo = true;
14731debfc3dSmrg
14741debfc3dSmrg      static _GLIBCXX_USE_CONSTEXPR bool traps = __glibcxx_integral_traps;
14751debfc3dSmrg      static _GLIBCXX_USE_CONSTEXPR bool tinyness_before = false;
14761debfc3dSmrg      static _GLIBCXX_USE_CONSTEXPR float_round_style round_style
14771debfc3dSmrg       = round_toward_zero;
14781debfc3dSmrg    };
14791debfc3dSmrg
14801debfc3dSmrg#define __INT_N(TYPE, BITSIZE, EXT, UEXT)			\
14811debfc3dSmrg  template<> 									\
14821debfc3dSmrg    struct numeric_limits<TYPE> 						\
14831debfc3dSmrg    { 										\
14841debfc3dSmrg      static _GLIBCXX_USE_CONSTEXPR bool is_specialized = true; 		\
14851debfc3dSmrg 										\
14861debfc3dSmrg      static _GLIBCXX_CONSTEXPR TYPE 						\
14871debfc3dSmrg	min() _GLIBCXX_USE_NOEXCEPT { return __glibcxx_min_b (TYPE, BITSIZE); } \
14881debfc3dSmrg 										\
14891debfc3dSmrg      static _GLIBCXX_CONSTEXPR TYPE 						\
14901debfc3dSmrg      max() _GLIBCXX_USE_NOEXCEPT { return __glibcxx_max_b (TYPE, BITSIZE); } 	\
14911debfc3dSmrg 										\
14921debfc3dSmrg      static _GLIBCXX_USE_CONSTEXPR int digits 					\
14931debfc3dSmrg       = BITSIZE - 1; 								\
14941debfc3dSmrg      static _GLIBCXX_USE_CONSTEXPR int digits10 				\
14951debfc3dSmrg       = (BITSIZE - 1) * 643L / 2136; 						\
14961debfc3dSmrg      										\
14971debfc3dSmrg      static _GLIBCXX_USE_CONSTEXPR bool is_signed = true; 			\
14981debfc3dSmrg      static _GLIBCXX_USE_CONSTEXPR bool is_integer = true; 			\
14991debfc3dSmrg      static _GLIBCXX_USE_CONSTEXPR bool is_exact = true; 			\
15001debfc3dSmrg      static _GLIBCXX_USE_CONSTEXPR int radix = 2; 				\
15011debfc3dSmrg 										\
15021debfc3dSmrg      static _GLIBCXX_CONSTEXPR TYPE 						\
15031debfc3dSmrg      epsilon() _GLIBCXX_USE_NOEXCEPT { return 0; } 				\
15041debfc3dSmrg 										\
15051debfc3dSmrg      static _GLIBCXX_CONSTEXPR TYPE 						\
15061debfc3dSmrg      round_error() _GLIBCXX_USE_NOEXCEPT { return 0; } 			\
15071debfc3dSmrg 										\
15081debfc3dSmrg      EXT									\
15091debfc3dSmrg 										\
15101debfc3dSmrg      static _GLIBCXX_USE_CONSTEXPR int min_exponent = 0; 			\
15111debfc3dSmrg      static _GLIBCXX_USE_CONSTEXPR int min_exponent10 = 0; 			\
15121debfc3dSmrg      static _GLIBCXX_USE_CONSTEXPR int max_exponent = 0; 			\
15131debfc3dSmrg      static _GLIBCXX_USE_CONSTEXPR int max_exponent10 = 0; 			\
15141debfc3dSmrg 										\
15151debfc3dSmrg      static _GLIBCXX_USE_CONSTEXPR bool has_infinity = false; 			\
15161debfc3dSmrg      static _GLIBCXX_USE_CONSTEXPR bool has_quiet_NaN = false; 		\
15171debfc3dSmrg      static _GLIBCXX_USE_CONSTEXPR bool has_signaling_NaN = false; 		\
15181debfc3dSmrg      static _GLIBCXX_USE_CONSTEXPR float_denorm_style has_denorm 		\
15191debfc3dSmrg       = denorm_absent; 							\
15201debfc3dSmrg      static _GLIBCXX_USE_CONSTEXPR bool has_denorm_loss = false; 		\
15211debfc3dSmrg 										\
15221debfc3dSmrg      static _GLIBCXX_CONSTEXPR TYPE 						\
15231debfc3dSmrg      infinity() _GLIBCXX_USE_NOEXCEPT 						\
15241debfc3dSmrg      { return static_cast<TYPE>(0); } 						\
15251debfc3dSmrg 										\
15261debfc3dSmrg      static _GLIBCXX_CONSTEXPR TYPE 						\
15271debfc3dSmrg      quiet_NaN() _GLIBCXX_USE_NOEXCEPT 					\
15281debfc3dSmrg      { return static_cast<TYPE>(0); } 						\
15291debfc3dSmrg       										\
15301debfc3dSmrg      static _GLIBCXX_CONSTEXPR TYPE 						\
15311debfc3dSmrg      signaling_NaN() _GLIBCXX_USE_NOEXCEPT 					\
15321debfc3dSmrg      { return static_cast<TYPE>(0); } 						\
15331debfc3dSmrg       										\
15341debfc3dSmrg      static _GLIBCXX_CONSTEXPR TYPE 						\
15351debfc3dSmrg      denorm_min() _GLIBCXX_USE_NOEXCEPT 					\
15361debfc3dSmrg      { return static_cast<TYPE>(0); } 						\
15371debfc3dSmrg 										\
15381debfc3dSmrg      static _GLIBCXX_USE_CONSTEXPR bool is_iec559 = false; 			\
15391debfc3dSmrg      static _GLIBCXX_USE_CONSTEXPR bool is_bounded = true; 			\
15401debfc3dSmrg      static _GLIBCXX_USE_CONSTEXPR bool is_modulo = false; 			\
15411debfc3dSmrg 										\
15421debfc3dSmrg      static _GLIBCXX_USE_CONSTEXPR bool traps 					\
15431debfc3dSmrg       = __glibcxx_integral_traps; 						\
15441debfc3dSmrg      static _GLIBCXX_USE_CONSTEXPR bool tinyness_before = false; 		\
15451debfc3dSmrg      static _GLIBCXX_USE_CONSTEXPR float_round_style round_style 		\
15461debfc3dSmrg       = round_toward_zero; 							\
15471debfc3dSmrg    }; 										\
15481debfc3dSmrg 										\
15491debfc3dSmrg  template<> 									\
15501debfc3dSmrg    struct numeric_limits<unsigned TYPE> 					\
15511debfc3dSmrg    { 										\
15521debfc3dSmrg      static _GLIBCXX_USE_CONSTEXPR bool is_specialized = true; 		\
15531debfc3dSmrg 										\
15541debfc3dSmrg      static _GLIBCXX_CONSTEXPR unsigned TYPE 					\
15551debfc3dSmrg      min() _GLIBCXX_USE_NOEXCEPT { return 0; } 				\
15561debfc3dSmrg 										\
15571debfc3dSmrg      static _GLIBCXX_CONSTEXPR unsigned TYPE 					\
15581debfc3dSmrg      max() _GLIBCXX_USE_NOEXCEPT						\
15591debfc3dSmrg      { return  __glibcxx_max_b (unsigned TYPE, BITSIZE); }			\
15601debfc3dSmrg 										\
15611debfc3dSmrg      UEXT									\
15621debfc3dSmrg 										\
15631debfc3dSmrg      static _GLIBCXX_USE_CONSTEXPR int digits 					\
15641debfc3dSmrg       = BITSIZE; 								\
15651debfc3dSmrg      static _GLIBCXX_USE_CONSTEXPR int digits10 				\
15661debfc3dSmrg       = BITSIZE * 643L / 2136; 						\
15671debfc3dSmrg      static _GLIBCXX_USE_CONSTEXPR bool is_signed = false; 			\
15681debfc3dSmrg      static _GLIBCXX_USE_CONSTEXPR bool is_integer = true; 			\
15691debfc3dSmrg      static _GLIBCXX_USE_CONSTEXPR bool is_exact = true; 			\
15701debfc3dSmrg      static _GLIBCXX_USE_CONSTEXPR int radix = 2; 				\
15711debfc3dSmrg 										\
15721debfc3dSmrg      static _GLIBCXX_CONSTEXPR unsigned TYPE 					\
15731debfc3dSmrg      epsilon() _GLIBCXX_USE_NOEXCEPT { return 0; } 				\
15741debfc3dSmrg 										\
15751debfc3dSmrg      static _GLIBCXX_CONSTEXPR unsigned TYPE 					\
15761debfc3dSmrg      round_error() _GLIBCXX_USE_NOEXCEPT { return 0; } 			\
15771debfc3dSmrg 										\
15781debfc3dSmrg      static _GLIBCXX_USE_CONSTEXPR int min_exponent = 0; 			\
15791debfc3dSmrg      static _GLIBCXX_USE_CONSTEXPR int min_exponent10 = 0; 			\
15801debfc3dSmrg      static _GLIBCXX_USE_CONSTEXPR int max_exponent = 0; 			\
15811debfc3dSmrg      static _GLIBCXX_USE_CONSTEXPR int max_exponent10 = 0; 			\
15821debfc3dSmrg 										\
15831debfc3dSmrg      static _GLIBCXX_USE_CONSTEXPR bool has_infinity = false; 			\
15841debfc3dSmrg      static _GLIBCXX_USE_CONSTEXPR bool has_quiet_NaN = false; 		\
15851debfc3dSmrg      static _GLIBCXX_USE_CONSTEXPR bool has_signaling_NaN = false; 		\
15861debfc3dSmrg      static _GLIBCXX_USE_CONSTEXPR float_denorm_style has_denorm 		\
15871debfc3dSmrg       = denorm_absent; 							\
15881debfc3dSmrg      static _GLIBCXX_USE_CONSTEXPR bool has_denorm_loss = false; 		\
15891debfc3dSmrg 										\
15901debfc3dSmrg      static _GLIBCXX_CONSTEXPR unsigned TYPE 					\
15911debfc3dSmrg      infinity() _GLIBCXX_USE_NOEXCEPT 						\
15921debfc3dSmrg      { return static_cast<unsigned TYPE>(0); } 				\
15931debfc3dSmrg 										\
15941debfc3dSmrg      static _GLIBCXX_CONSTEXPR unsigned TYPE 					\
15951debfc3dSmrg      quiet_NaN() _GLIBCXX_USE_NOEXCEPT 					\
15961debfc3dSmrg      { return static_cast<unsigned TYPE>(0); } 				\
15971debfc3dSmrg 										\
15981debfc3dSmrg      static _GLIBCXX_CONSTEXPR unsigned TYPE 					\
15991debfc3dSmrg      signaling_NaN() _GLIBCXX_USE_NOEXCEPT 					\
16001debfc3dSmrg      { return static_cast<unsigned TYPE>(0); } 				\
16011debfc3dSmrg 										\
16021debfc3dSmrg      static _GLIBCXX_CONSTEXPR unsigned TYPE 					\
16031debfc3dSmrg      denorm_min() _GLIBCXX_USE_NOEXCEPT 					\
16041debfc3dSmrg      { return static_cast<unsigned TYPE>(0); } 				\
16051debfc3dSmrg 										\
16061debfc3dSmrg      static _GLIBCXX_USE_CONSTEXPR bool is_iec559 = false; 			\
16071debfc3dSmrg      static _GLIBCXX_USE_CONSTEXPR bool is_bounded = true; 			\
16081debfc3dSmrg      static _GLIBCXX_USE_CONSTEXPR bool is_modulo = true; 			\
16091debfc3dSmrg 										\
16101debfc3dSmrg      static _GLIBCXX_USE_CONSTEXPR bool traps = __glibcxx_integral_traps; 	\
16111debfc3dSmrg      static _GLIBCXX_USE_CONSTEXPR bool tinyness_before = false; 		\
16121debfc3dSmrg      static _GLIBCXX_USE_CONSTEXPR float_round_style round_style 		\
16131debfc3dSmrg       = round_toward_zero; 							\
16141debfc3dSmrg    };
16151debfc3dSmrg
16161debfc3dSmrg#if __cplusplus >= 201103L
16171debfc3dSmrg
16181debfc3dSmrg#define __INT_N_201103(TYPE)							\
16191debfc3dSmrg      static constexpr TYPE 							\
16201debfc3dSmrg      lowest() noexcept { return min(); }					\
16211debfc3dSmrg      static constexpr int max_digits10 = 0;
16221debfc3dSmrg
16231debfc3dSmrg#define __INT_N_U201103(TYPE)							\
16241debfc3dSmrg      static constexpr unsigned TYPE 						\
16251debfc3dSmrg      lowest() noexcept { return min(); }					\
16261debfc3dSmrg      static constexpr int max_digits10 = 0;
16271debfc3dSmrg
16281debfc3dSmrg#else
16291debfc3dSmrg#define __INT_N_201103(TYPE)
16301debfc3dSmrg#define __INT_N_U201103(TYPE)
16311debfc3dSmrg#endif
16321debfc3dSmrg
1633*8feb0f0bSmrg#if !defined(__STRICT_ANSI__)
16341debfc3dSmrg#ifdef __GLIBCXX_TYPE_INT_N_0
16351debfc3dSmrg  __INT_N(__GLIBCXX_TYPE_INT_N_0, __GLIBCXX_BITSIZE_INT_N_0,
16361debfc3dSmrg	  __INT_N_201103 (__GLIBCXX_TYPE_INT_N_0), __INT_N_U201103 (__GLIBCXX_TYPE_INT_N_0))
16371debfc3dSmrg#endif
16381debfc3dSmrg#ifdef __GLIBCXX_TYPE_INT_N_1
16391debfc3dSmrg  __INT_N (__GLIBCXX_TYPE_INT_N_1, __GLIBCXX_BITSIZE_INT_N_1,
16401debfc3dSmrg	  __INT_N_201103 (__GLIBCXX_TYPE_INT_N_1), __INT_N_U201103 (__GLIBCXX_TYPE_INT_N_1))
16411debfc3dSmrg#endif
16421debfc3dSmrg#ifdef __GLIBCXX_TYPE_INT_N_2
16431debfc3dSmrg  __INT_N (__GLIBCXX_TYPE_INT_N_2, __GLIBCXX_BITSIZE_INT_N_2,
16441debfc3dSmrg	  __INT_N_201103 (__GLIBCXX_TYPE_INT_N_2), __INT_N_U201103 (__GLIBCXX_TYPE_INT_N_2))
16451debfc3dSmrg#endif
16461debfc3dSmrg#ifdef __GLIBCXX_TYPE_INT_N_3
16471debfc3dSmrg  __INT_N (__GLIBCXX_TYPE_INT_N_3, __GLIBCXX_BITSIZE_INT_N_3,
16481debfc3dSmrg	  __INT_N_201103 (__GLIBCXX_TYPE_INT_N_3), __INT_N_U201103 (__GLIBCXX_TYPE_INT_N_3))
16491debfc3dSmrg#endif
16501debfc3dSmrg
1651*8feb0f0bSmrg#elif defined __STRICT_ANSI__ && defined __SIZEOF_INT128__
1652*8feb0f0bSmrg  __INT_N(__int128, 128,
1653*8feb0f0bSmrg	  __INT_N_201103 (__int128),
1654*8feb0f0bSmrg	  __INT_N_U201103 (__int128))
1655*8feb0f0bSmrg#endif
1656*8feb0f0bSmrg
16571debfc3dSmrg#undef __INT_N
16581debfc3dSmrg#undef __INT_N_201103
16591debfc3dSmrg#undef __INT_N_U201103
16601debfc3dSmrg
16611debfc3dSmrg
16621debfc3dSmrg  /// numeric_limits<float> specialization.
16631debfc3dSmrg  template<>
16641debfc3dSmrg    struct numeric_limits<float>
16651debfc3dSmrg    {
16661debfc3dSmrg      static _GLIBCXX_USE_CONSTEXPR bool is_specialized = true;
16671debfc3dSmrg
16681debfc3dSmrg      static _GLIBCXX_CONSTEXPR float
16691debfc3dSmrg      min() _GLIBCXX_USE_NOEXCEPT { return __FLT_MIN__; }
16701debfc3dSmrg
16711debfc3dSmrg      static _GLIBCXX_CONSTEXPR float
16721debfc3dSmrg      max() _GLIBCXX_USE_NOEXCEPT { return __FLT_MAX__; }
16731debfc3dSmrg
16741debfc3dSmrg#if __cplusplus >= 201103L
16751debfc3dSmrg      static constexpr float
16761debfc3dSmrg      lowest() noexcept { return -__FLT_MAX__; }
16771debfc3dSmrg#endif
16781debfc3dSmrg
16791debfc3dSmrg      static _GLIBCXX_USE_CONSTEXPR int digits = __FLT_MANT_DIG__;
16801debfc3dSmrg      static _GLIBCXX_USE_CONSTEXPR int digits10 = __FLT_DIG__;
16811debfc3dSmrg#if __cplusplus >= 201103L
16821debfc3dSmrg      static constexpr int max_digits10
16831debfc3dSmrg	 = __glibcxx_max_digits10 (__FLT_MANT_DIG__);
16841debfc3dSmrg#endif
16851debfc3dSmrg      static _GLIBCXX_USE_CONSTEXPR bool is_signed = true;
16861debfc3dSmrg      static _GLIBCXX_USE_CONSTEXPR bool is_integer = false;
16871debfc3dSmrg      static _GLIBCXX_USE_CONSTEXPR bool is_exact = false;
16881debfc3dSmrg      static _GLIBCXX_USE_CONSTEXPR int radix = __FLT_RADIX__;
16891debfc3dSmrg
16901debfc3dSmrg      static _GLIBCXX_CONSTEXPR float
16911debfc3dSmrg      epsilon() _GLIBCXX_USE_NOEXCEPT { return __FLT_EPSILON__; }
16921debfc3dSmrg
16931debfc3dSmrg      static _GLIBCXX_CONSTEXPR float
16941debfc3dSmrg      round_error() _GLIBCXX_USE_NOEXCEPT { return 0.5F; }
16951debfc3dSmrg
16961debfc3dSmrg      static _GLIBCXX_USE_CONSTEXPR int min_exponent = __FLT_MIN_EXP__;
16971debfc3dSmrg      static _GLIBCXX_USE_CONSTEXPR int min_exponent10 = __FLT_MIN_10_EXP__;
16981debfc3dSmrg      static _GLIBCXX_USE_CONSTEXPR int max_exponent = __FLT_MAX_EXP__;
16991debfc3dSmrg      static _GLIBCXX_USE_CONSTEXPR int max_exponent10 = __FLT_MAX_10_EXP__;
17001debfc3dSmrg
17011debfc3dSmrg      static _GLIBCXX_USE_CONSTEXPR bool has_infinity = __FLT_HAS_INFINITY__;
17021debfc3dSmrg      static _GLIBCXX_USE_CONSTEXPR bool has_quiet_NaN = __FLT_HAS_QUIET_NAN__;
17031debfc3dSmrg      static _GLIBCXX_USE_CONSTEXPR bool has_signaling_NaN = has_quiet_NaN;
17041debfc3dSmrg      static _GLIBCXX_USE_CONSTEXPR float_denorm_style has_denorm
17051debfc3dSmrg	= bool(__FLT_HAS_DENORM__) ? denorm_present : denorm_absent;
17061debfc3dSmrg      static _GLIBCXX_USE_CONSTEXPR bool has_denorm_loss
17071debfc3dSmrg       = __glibcxx_float_has_denorm_loss;
17081debfc3dSmrg
17091debfc3dSmrg      static _GLIBCXX_CONSTEXPR float
17101debfc3dSmrg      infinity() _GLIBCXX_USE_NOEXCEPT { return __builtin_huge_valf(); }
17111debfc3dSmrg
17121debfc3dSmrg      static _GLIBCXX_CONSTEXPR float
17131debfc3dSmrg      quiet_NaN() _GLIBCXX_USE_NOEXCEPT { return __builtin_nanf(""); }
17141debfc3dSmrg
17151debfc3dSmrg      static _GLIBCXX_CONSTEXPR float
17161debfc3dSmrg      signaling_NaN() _GLIBCXX_USE_NOEXCEPT { return __builtin_nansf(""); }
17171debfc3dSmrg
17181debfc3dSmrg      static _GLIBCXX_CONSTEXPR float
17191debfc3dSmrg      denorm_min() _GLIBCXX_USE_NOEXCEPT { return __FLT_DENORM_MIN__; }
17201debfc3dSmrg
17211debfc3dSmrg      static _GLIBCXX_USE_CONSTEXPR bool is_iec559
17221debfc3dSmrg	= has_infinity && has_quiet_NaN && has_denorm == denorm_present;
17231debfc3dSmrg      static _GLIBCXX_USE_CONSTEXPR bool is_bounded = true;
17241debfc3dSmrg      static _GLIBCXX_USE_CONSTEXPR bool is_modulo = false;
17251debfc3dSmrg
17261debfc3dSmrg      static _GLIBCXX_USE_CONSTEXPR bool traps = __glibcxx_float_traps;
17271debfc3dSmrg      static _GLIBCXX_USE_CONSTEXPR bool tinyness_before
17281debfc3dSmrg       = __glibcxx_float_tinyness_before;
17291debfc3dSmrg      static _GLIBCXX_USE_CONSTEXPR float_round_style round_style
17301debfc3dSmrg       = round_to_nearest;
17311debfc3dSmrg    };
17321debfc3dSmrg
17331debfc3dSmrg#undef __glibcxx_float_has_denorm_loss
17341debfc3dSmrg#undef __glibcxx_float_traps
17351debfc3dSmrg#undef __glibcxx_float_tinyness_before
17361debfc3dSmrg
17371debfc3dSmrg  /// numeric_limits<double> specialization.
17381debfc3dSmrg  template<>
17391debfc3dSmrg    struct numeric_limits<double>
17401debfc3dSmrg    {
17411debfc3dSmrg      static _GLIBCXX_USE_CONSTEXPR bool is_specialized = true;
17421debfc3dSmrg
17431debfc3dSmrg      static _GLIBCXX_CONSTEXPR double
17441debfc3dSmrg      min() _GLIBCXX_USE_NOEXCEPT { return __DBL_MIN__; }
17451debfc3dSmrg
17461debfc3dSmrg      static _GLIBCXX_CONSTEXPR double
17471debfc3dSmrg      max() _GLIBCXX_USE_NOEXCEPT { return __DBL_MAX__; }
17481debfc3dSmrg
17491debfc3dSmrg#if __cplusplus >= 201103L
17501debfc3dSmrg      static constexpr double
17511debfc3dSmrg      lowest() noexcept { return -__DBL_MAX__; }
17521debfc3dSmrg#endif
17531debfc3dSmrg
17541debfc3dSmrg      static _GLIBCXX_USE_CONSTEXPR int digits = __DBL_MANT_DIG__;
17551debfc3dSmrg      static _GLIBCXX_USE_CONSTEXPR int digits10 = __DBL_DIG__;
17561debfc3dSmrg#if __cplusplus >= 201103L
17571debfc3dSmrg      static constexpr int max_digits10
17581debfc3dSmrg	 = __glibcxx_max_digits10 (__DBL_MANT_DIG__);
17591debfc3dSmrg#endif
17601debfc3dSmrg      static _GLIBCXX_USE_CONSTEXPR bool is_signed = true;
17611debfc3dSmrg      static _GLIBCXX_USE_CONSTEXPR bool is_integer = false;
17621debfc3dSmrg      static _GLIBCXX_USE_CONSTEXPR bool is_exact = false;
17631debfc3dSmrg      static _GLIBCXX_USE_CONSTEXPR int radix = __FLT_RADIX__;
17641debfc3dSmrg
17651debfc3dSmrg      static _GLIBCXX_CONSTEXPR double
17661debfc3dSmrg      epsilon() _GLIBCXX_USE_NOEXCEPT { return __DBL_EPSILON__; }
17671debfc3dSmrg
17681debfc3dSmrg      static _GLIBCXX_CONSTEXPR double
17691debfc3dSmrg      round_error() _GLIBCXX_USE_NOEXCEPT { return 0.5; }
17701debfc3dSmrg
17711debfc3dSmrg      static _GLIBCXX_USE_CONSTEXPR int min_exponent = __DBL_MIN_EXP__;
17721debfc3dSmrg      static _GLIBCXX_USE_CONSTEXPR int min_exponent10 = __DBL_MIN_10_EXP__;
17731debfc3dSmrg      static _GLIBCXX_USE_CONSTEXPR int max_exponent = __DBL_MAX_EXP__;
17741debfc3dSmrg      static _GLIBCXX_USE_CONSTEXPR int max_exponent10 = __DBL_MAX_10_EXP__;
17751debfc3dSmrg
17761debfc3dSmrg      static _GLIBCXX_USE_CONSTEXPR bool has_infinity = __DBL_HAS_INFINITY__;
17771debfc3dSmrg      static _GLIBCXX_USE_CONSTEXPR bool has_quiet_NaN = __DBL_HAS_QUIET_NAN__;
17781debfc3dSmrg      static _GLIBCXX_USE_CONSTEXPR bool has_signaling_NaN = has_quiet_NaN;
17791debfc3dSmrg      static _GLIBCXX_USE_CONSTEXPR float_denorm_style has_denorm
17801debfc3dSmrg	= bool(__DBL_HAS_DENORM__) ? denorm_present : denorm_absent;
17811debfc3dSmrg      static _GLIBCXX_USE_CONSTEXPR bool has_denorm_loss
17821debfc3dSmrg        = __glibcxx_double_has_denorm_loss;
17831debfc3dSmrg
17841debfc3dSmrg      static _GLIBCXX_CONSTEXPR double
17851debfc3dSmrg      infinity() _GLIBCXX_USE_NOEXCEPT { return __builtin_huge_val(); }
17861debfc3dSmrg
17871debfc3dSmrg      static _GLIBCXX_CONSTEXPR double
17881debfc3dSmrg      quiet_NaN() _GLIBCXX_USE_NOEXCEPT { return __builtin_nan(""); }
17891debfc3dSmrg
17901debfc3dSmrg      static _GLIBCXX_CONSTEXPR double
17911debfc3dSmrg      signaling_NaN() _GLIBCXX_USE_NOEXCEPT { return __builtin_nans(""); }
17921debfc3dSmrg
17931debfc3dSmrg      static _GLIBCXX_CONSTEXPR double
17941debfc3dSmrg      denorm_min() _GLIBCXX_USE_NOEXCEPT { return __DBL_DENORM_MIN__; }
17951debfc3dSmrg
17961debfc3dSmrg      static _GLIBCXX_USE_CONSTEXPR bool is_iec559
17971debfc3dSmrg	= has_infinity && has_quiet_NaN && has_denorm == denorm_present;
17981debfc3dSmrg      static _GLIBCXX_USE_CONSTEXPR bool is_bounded = true;
17991debfc3dSmrg      static _GLIBCXX_USE_CONSTEXPR bool is_modulo = false;
18001debfc3dSmrg
18011debfc3dSmrg      static _GLIBCXX_USE_CONSTEXPR bool traps = __glibcxx_double_traps;
18021debfc3dSmrg      static _GLIBCXX_USE_CONSTEXPR bool tinyness_before
18031debfc3dSmrg       = __glibcxx_double_tinyness_before;
18041debfc3dSmrg      static _GLIBCXX_USE_CONSTEXPR float_round_style round_style
18051debfc3dSmrg       = round_to_nearest;
18061debfc3dSmrg    };
18071debfc3dSmrg
18081debfc3dSmrg#undef __glibcxx_double_has_denorm_loss
18091debfc3dSmrg#undef __glibcxx_double_traps
18101debfc3dSmrg#undef __glibcxx_double_tinyness_before
18111debfc3dSmrg
18121debfc3dSmrg  /// numeric_limits<long double> specialization.
18131debfc3dSmrg  template<>
18141debfc3dSmrg    struct numeric_limits<long double>
18151debfc3dSmrg    {
18161debfc3dSmrg      static _GLIBCXX_USE_CONSTEXPR bool is_specialized = true;
18171debfc3dSmrg
18181debfc3dSmrg      static _GLIBCXX_CONSTEXPR long double
18191debfc3dSmrg      min() _GLIBCXX_USE_NOEXCEPT { return __LDBL_MIN__; }
18201debfc3dSmrg
18211debfc3dSmrg      static _GLIBCXX_CONSTEXPR long double
18221debfc3dSmrg      max() _GLIBCXX_USE_NOEXCEPT { return __LDBL_MAX__; }
18231debfc3dSmrg
18241debfc3dSmrg#if __cplusplus >= 201103L
18251debfc3dSmrg      static constexpr long double
18261debfc3dSmrg      lowest() noexcept { return -__LDBL_MAX__; }
18271debfc3dSmrg#endif
18281debfc3dSmrg
18291debfc3dSmrg      static _GLIBCXX_USE_CONSTEXPR int digits = __LDBL_MANT_DIG__;
18301debfc3dSmrg      static _GLIBCXX_USE_CONSTEXPR int digits10 = __LDBL_DIG__;
18311debfc3dSmrg#if __cplusplus >= 201103L
18321debfc3dSmrg      static _GLIBCXX_USE_CONSTEXPR int max_digits10
18331debfc3dSmrg	 = __glibcxx_max_digits10 (__LDBL_MANT_DIG__);
18341debfc3dSmrg#endif
18351debfc3dSmrg      static _GLIBCXX_USE_CONSTEXPR bool is_signed = true;
18361debfc3dSmrg      static _GLIBCXX_USE_CONSTEXPR bool is_integer = false;
18371debfc3dSmrg      static _GLIBCXX_USE_CONSTEXPR bool is_exact = false;
18381debfc3dSmrg      static _GLIBCXX_USE_CONSTEXPR int radix = __FLT_RADIX__;
18391debfc3dSmrg
18401debfc3dSmrg      static _GLIBCXX_CONSTEXPR long double
18411debfc3dSmrg      epsilon() _GLIBCXX_USE_NOEXCEPT { return __LDBL_EPSILON__; }
18421debfc3dSmrg
18431debfc3dSmrg      static _GLIBCXX_CONSTEXPR long double
18441debfc3dSmrg      round_error() _GLIBCXX_USE_NOEXCEPT { return 0.5L; }
18451debfc3dSmrg
18461debfc3dSmrg      static _GLIBCXX_USE_CONSTEXPR int min_exponent = __LDBL_MIN_EXP__;
18471debfc3dSmrg      static _GLIBCXX_USE_CONSTEXPR int min_exponent10 = __LDBL_MIN_10_EXP__;
18481debfc3dSmrg      static _GLIBCXX_USE_CONSTEXPR int max_exponent = __LDBL_MAX_EXP__;
18491debfc3dSmrg      static _GLIBCXX_USE_CONSTEXPR int max_exponent10 = __LDBL_MAX_10_EXP__;
18501debfc3dSmrg
18511debfc3dSmrg      static _GLIBCXX_USE_CONSTEXPR bool has_infinity = __LDBL_HAS_INFINITY__;
18521debfc3dSmrg      static _GLIBCXX_USE_CONSTEXPR bool has_quiet_NaN = __LDBL_HAS_QUIET_NAN__;
18531debfc3dSmrg      static _GLIBCXX_USE_CONSTEXPR bool has_signaling_NaN = has_quiet_NaN;
18541debfc3dSmrg      static _GLIBCXX_USE_CONSTEXPR float_denorm_style has_denorm
18551debfc3dSmrg	= bool(__LDBL_HAS_DENORM__) ? denorm_present : denorm_absent;
18561debfc3dSmrg      static _GLIBCXX_USE_CONSTEXPR bool has_denorm_loss
18571debfc3dSmrg	= __glibcxx_long_double_has_denorm_loss;
18581debfc3dSmrg
18591debfc3dSmrg      static _GLIBCXX_CONSTEXPR long double
18601debfc3dSmrg      infinity() _GLIBCXX_USE_NOEXCEPT { return __builtin_huge_vall(); }
18611debfc3dSmrg
18621debfc3dSmrg      static _GLIBCXX_CONSTEXPR long double
18631debfc3dSmrg      quiet_NaN() _GLIBCXX_USE_NOEXCEPT { return __builtin_nanl(""); }
18641debfc3dSmrg
18651debfc3dSmrg      static _GLIBCXX_CONSTEXPR long double
18661debfc3dSmrg      signaling_NaN() _GLIBCXX_USE_NOEXCEPT { return __builtin_nansl(""); }
18671debfc3dSmrg
18681debfc3dSmrg      static _GLIBCXX_CONSTEXPR long double
18691debfc3dSmrg      denorm_min() _GLIBCXX_USE_NOEXCEPT { return __LDBL_DENORM_MIN__; }
18701debfc3dSmrg
18711debfc3dSmrg      static _GLIBCXX_USE_CONSTEXPR bool is_iec559
18721debfc3dSmrg	= has_infinity && has_quiet_NaN && has_denorm == denorm_present;
18731debfc3dSmrg      static _GLIBCXX_USE_CONSTEXPR bool is_bounded = true;
18741debfc3dSmrg      static _GLIBCXX_USE_CONSTEXPR bool is_modulo = false;
18751debfc3dSmrg
18761debfc3dSmrg      static _GLIBCXX_USE_CONSTEXPR bool traps = __glibcxx_long_double_traps;
18771debfc3dSmrg      static _GLIBCXX_USE_CONSTEXPR bool tinyness_before =
18781debfc3dSmrg					 __glibcxx_long_double_tinyness_before;
18791debfc3dSmrg      static _GLIBCXX_USE_CONSTEXPR float_round_style round_style =
18801debfc3dSmrg						      round_to_nearest;
18811debfc3dSmrg    };
18821debfc3dSmrg
18831debfc3dSmrg#undef __glibcxx_long_double_has_denorm_loss
18841debfc3dSmrg#undef __glibcxx_long_double_traps
18851debfc3dSmrg#undef __glibcxx_long_double_tinyness_before
18861debfc3dSmrg
18871debfc3dSmrg_GLIBCXX_END_NAMESPACE_VERSION
18881debfc3dSmrg} // namespace
18891debfc3dSmrg
18901debfc3dSmrg#undef __glibcxx_signed
18911debfc3dSmrg#undef __glibcxx_min
18921debfc3dSmrg#undef __glibcxx_max
18931debfc3dSmrg#undef __glibcxx_digits
18941debfc3dSmrg#undef __glibcxx_digits10
18951debfc3dSmrg#undef __glibcxx_max_digits10
18961debfc3dSmrg
18971debfc3dSmrg#endif // _GLIBCXX_NUMERIC_LIMITS
1898