LCOV - code coverage report
Current view: top level - 11 - limits (source / functions) Hit Total Coverage
Test: jami-coverage-filtered.info Lines: 10 13 76.9 %
Date: 2025-08-24 09:11:10 Functions: 10 13 76.9 %

          Line data    Source code
       1             : // The template and inlines for the numeric_limits classes. -*- C++ -*-
       2             : 
       3             : // Copyright (C) 1999-2021 Free Software Foundation, Inc.
       4             : //
       5             : // This file is part of the GNU ISO C++ Library.  This library is free
       6             : // software; you can redistribute it and/or modify it under the
       7             : // terms of the GNU General Public License as published by the
       8             : // Free Software Foundation; either version 3, or (at your option)
       9             : // any later version.
      10             : 
      11             : // This library is distributed in the hope that it will be useful,
      12             : // but WITHOUT ANY WARRANTY; without even the implied warranty of
      13             : // MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
      14             : // GNU General Public License for more details.
      15             : 
      16             : // Under Section 7 of GPL version 3, you are granted additional
      17             : // permissions described in the GCC Runtime Library Exception, version
      18             : // 3.1, as published by the Free Software Foundation.
      19             : 
      20             : // You should have received a copy of the GNU General Public License and
      21             : // a copy of the GCC Runtime Library Exception along with this program;
      22             : // see the files COPYING3 and COPYING.RUNTIME respectively.  If not, see
      23             : // <http://www.gnu.org/licenses/>.
      24             : 
      25             : /** @file include/limits
      26             :  *  This is a Standard C++ Library header.
      27             :  */
      28             : 
      29             : // Note: this is not a conforming implementation.
      30             : // Written by Gabriel Dos Reis <gdr@codesourcery.com>
      31             : 
      32             : //
      33             : // ISO 14882:1998
      34             : // 18.2.1
      35             : //
      36             : 
      37             : #ifndef _GLIBCXX_NUMERIC_LIMITS
      38             : #define _GLIBCXX_NUMERIC_LIMITS 1
      39             : 
      40             : #pragma GCC system_header
      41             : 
      42             : #include <bits/c++config.h>
      43             : 
      44             : //
      45             : // The numeric_limits<> traits document implementation-defined aspects
      46             : // of fundamental arithmetic data types (integers and floating points).
      47             : // From Standard C++ point of view, there are 14 such types:
      48             : //   * integers
      49             : //         bool                                                 (1)
      50             : //         char, signed char, unsigned char, wchar_t            (4)
      51             : //         short, unsigned short                                (2)
      52             : //         int, unsigned                                        (2)
      53             : //         long, unsigned long                                  (2)
      54             : //
      55             : //   * floating points
      56             : //         float                                                (1)
      57             : //         double                                               (1)
      58             : //         long double                                          (1)
      59             : //
      60             : // GNU C++ understands (where supported by the host C-library)
      61             : //   * integer
      62             : //         long long, unsigned long long                        (2)
      63             : //
      64             : // which brings us to 16 fundamental arithmetic data types in GNU C++.
      65             : //
      66             : //
      67             : // Since a numeric_limits<> is a bit tricky to get right, we rely on
      68             : // an interface composed of macros which should be defined in config/os
      69             : // or config/cpu when they differ from the generic (read arbitrary)
      70             : // definitions given here.
      71             : //
      72             : 
      73             : // These values can be overridden in the target configuration file.
      74             : // The default values are appropriate for many 32-bit targets.
      75             : 
      76             : // GCC only intrinsically supports modulo integral types.  The only remaining
      77             : // integral exceptional values is division by zero.  Only targets that do not
      78             : // signal division by zero in some "hard to ignore" way should use false.
      79             : #ifndef __glibcxx_integral_traps
      80             : # define __glibcxx_integral_traps true
      81             : #endif
      82             : 
      83             : // float
      84             : //
      85             : 
      86             : // Default values.  Should be overridden in configuration files if necessary.
      87             : 
      88             : #ifndef __glibcxx_float_has_denorm_loss
      89             : #  define __glibcxx_float_has_denorm_loss false
      90             : #endif
      91             : #ifndef __glibcxx_float_traps
      92             : #  define __glibcxx_float_traps false
      93             : #endif
      94             : #ifndef __glibcxx_float_tinyness_before
      95             : #  define __glibcxx_float_tinyness_before false
      96             : #endif
      97             : 
      98             : // double
      99             : 
     100             : // Default values.  Should be overridden in configuration files if necessary.
     101             : 
     102             : #ifndef __glibcxx_double_has_denorm_loss
     103             : #  define __glibcxx_double_has_denorm_loss false
     104             : #endif
     105             : #ifndef __glibcxx_double_traps
     106             : #  define __glibcxx_double_traps false
     107             : #endif
     108             : #ifndef __glibcxx_double_tinyness_before
     109             : #  define __glibcxx_double_tinyness_before false
     110             : #endif
     111             : 
     112             : // long double
     113             : 
     114             : // Default values.  Should be overridden in configuration files if necessary.
     115             : 
     116             : #ifndef __glibcxx_long_double_has_denorm_loss
     117             : #  define __glibcxx_long_double_has_denorm_loss false
     118             : #endif
     119             : #ifndef __glibcxx_long_double_traps
     120             : #  define __glibcxx_long_double_traps false
     121             : #endif
     122             : #ifndef __glibcxx_long_double_tinyness_before
     123             : #  define __glibcxx_long_double_tinyness_before false
     124             : #endif
     125             : 
     126             : // You should not need to define any macros below this point.
     127             : 
     128             : #define __glibcxx_signed_b(T,B) ((T)(-1) < 0)
     129             : 
     130             : #define __glibcxx_min_b(T,B)                                    \
     131             :   (__glibcxx_signed_b (T,B) ? -__glibcxx_max_b (T,B) - 1 : (T)0)
     132             : 
     133             : #define __glibcxx_max_b(T,B)                                            \
     134             :   (__glibcxx_signed_b (T,B) ?                                           \
     135             :    (((((T)1 << (__glibcxx_digits_b (T,B) - 1)) - 1) << 1) + 1) : ~(T)0)
     136             : 
     137             : #define __glibcxx_digits_b(T,B)                         \
     138             :   (B - __glibcxx_signed_b (T,B))
     139             : 
     140             : // The fraction 643/2136 approximates log10(2) to 7 significant digits.
     141             : #define __glibcxx_digits10_b(T,B)               \
     142             :   (__glibcxx_digits_b (T,B) * 643L / 2136)
     143             : 
     144             : #define __glibcxx_signed(T) \
     145             :   __glibcxx_signed_b (T, sizeof(T) * __CHAR_BIT__)
     146             : #define __glibcxx_min(T) \
     147             :   __glibcxx_min_b (T, sizeof(T) * __CHAR_BIT__)
     148             : #define __glibcxx_max(T) \
     149             :   __glibcxx_max_b (T, sizeof(T) * __CHAR_BIT__)
     150             : #define __glibcxx_digits(T) \
     151             :   __glibcxx_digits_b (T, sizeof(T) * __CHAR_BIT__)
     152             : #define __glibcxx_digits10(T) \
     153             :   __glibcxx_digits10_b (T, sizeof(T) * __CHAR_BIT__)
     154             : 
     155             : #define __glibcxx_max_digits10(T) \
     156             :   (2 + (T) * 643L / 2136)
     157             : 
     158             : namespace std _GLIBCXX_VISIBILITY(default)
     159             : {
     160             : _GLIBCXX_BEGIN_NAMESPACE_VERSION
     161             : 
     162             :   /**
     163             :    *  @brief Describes the rounding style for floating-point types.
     164             :    *
     165             :    *  This is used in the std::numeric_limits class.
     166             :   */
     167             :   enum float_round_style
     168             :   {
     169             :     round_indeterminate       = -1,    /// Intermediate.
     170             :     round_toward_zero         = 0,     /// To zero.
     171             :     round_to_nearest          = 1,     /// To the nearest representable value.
     172             :     round_toward_infinity     = 2,     /// To infinity.
     173             :     round_toward_neg_infinity = 3      /// To negative infinity.
     174             :   };
     175             : 
     176             :   /**
     177             :    *  @brief Describes the denormalization for floating-point types.
     178             :    *
     179             :    *  These values represent the presence or absence of a variable number
     180             :    *  of exponent bits.  This type is used in the std::numeric_limits class.
     181             :   */
     182             :   enum float_denorm_style
     183             :   {
     184             :     /// Indeterminate at compile time whether denormalized values are allowed.
     185             :     denorm_indeterminate = -1,
     186             :     /// The type does not allow denormalized values.
     187             :     denorm_absent        = 0,
     188             :     /// The type allows denormalized values.
     189             :     denorm_present       = 1
     190             :   };
     191             : 
     192             :   /**
     193             :    *  @brief Part of std::numeric_limits.
     194             :    *
     195             :    *  The @c static @c const members are usable as integral constant
     196             :    *  expressions.
     197             :    *
     198             :    *  @note This is a separate class for purposes of efficiency; you
     199             :    *        should only access these members as part of an instantiation
     200             :    *        of the std::numeric_limits class.
     201             :   */
     202             :   struct __numeric_limits_base
     203             :   {
     204             :     /** This will be true for all fundamental types (which have
     205             :         specializations), and false for everything else.  */
     206             :     static _GLIBCXX_USE_CONSTEXPR bool is_specialized = false;
     207             : 
     208             :     /** The number of @c radix digits that be represented without change:  for
     209             :         integer types, the number of non-sign bits in the mantissa; for
     210             :         floating types, the number of @c radix digits in the mantissa.  */
     211             :     static _GLIBCXX_USE_CONSTEXPR int digits = 0;
     212             : 
     213             :     /** The number of base 10 digits that can be represented without change. */
     214             :     static _GLIBCXX_USE_CONSTEXPR int digits10 = 0;
     215             : 
     216             : #if __cplusplus >= 201103L
     217             :     /** The number of base 10 digits required to ensure that values which
     218             :         differ are always differentiated.  */
     219             :     static constexpr int max_digits10 = 0;
     220             : #endif
     221             : 
     222             :     /** True if the type is signed.  */
     223             :     static _GLIBCXX_USE_CONSTEXPR bool is_signed = false;
     224             : 
     225             :     /** True if the type is integer.  */
     226             :     static _GLIBCXX_USE_CONSTEXPR bool is_integer = false;
     227             : 
     228             :     /** True if the type uses an exact representation. All integer types are
     229             :         exact, but not all exact types are integer.  For example, rational and
     230             :         fixed-exponent representations are exact but not integer. */
     231             :     static _GLIBCXX_USE_CONSTEXPR bool is_exact = false;
     232             : 
     233             :     /** For integer types, specifies the base of the representation.  For
     234             :         floating types, specifies the base of the exponent representation.  */
     235             :     static _GLIBCXX_USE_CONSTEXPR int radix = 0;
     236             : 
     237             :     /** The minimum negative integer such that @c radix raised to the power of
     238             :         (one less than that integer) is a normalized floating point number.  */
     239             :     static _GLIBCXX_USE_CONSTEXPR int min_exponent = 0;
     240             : 
     241             :     /** The minimum negative integer such that 10 raised to that power is in
     242             :         the range of normalized floating point numbers.  */
     243             :     static _GLIBCXX_USE_CONSTEXPR int min_exponent10 = 0;
     244             : 
     245             :     /** The maximum positive integer such that @c radix raised to the power of
     246             :         (one less than that integer) is a representable finite floating point
     247             :         number.  */
     248             :     static _GLIBCXX_USE_CONSTEXPR int max_exponent = 0;
     249             : 
     250             :     /** The maximum positive integer such that 10 raised to that power is in
     251             :         the range of representable finite floating point numbers.  */
     252             :     static _GLIBCXX_USE_CONSTEXPR int max_exponent10 = 0;
     253             : 
     254             :     /** True if the type has a representation for positive infinity.  */
     255             :     static _GLIBCXX_USE_CONSTEXPR bool has_infinity = false;
     256             : 
     257             :     /** True if the type has a representation for a quiet (non-signaling)
     258             :         Not a Number.  */
     259             :     static _GLIBCXX_USE_CONSTEXPR bool has_quiet_NaN = false;
     260             : 
     261             :     /** True if the type has a representation for a signaling
     262             :         Not a Number.  */
     263             :     static _GLIBCXX_USE_CONSTEXPR bool has_signaling_NaN = false;
     264             : 
     265             :     /** See std::float_denorm_style for more information.  */
     266             :     static _GLIBCXX_USE_CONSTEXPR float_denorm_style has_denorm = denorm_absent;
     267             : 
     268             :     /** True if loss of accuracy is detected as a denormalization loss,
     269             :         rather than as an inexact result. */
     270             :     static _GLIBCXX_USE_CONSTEXPR bool has_denorm_loss = false;
     271             : 
     272             :     /** True if-and-only-if the type adheres to the IEC 559 standard, also
     273             :         known as IEEE 754.  (Only makes sense for floating point types.)  */
     274             :     static _GLIBCXX_USE_CONSTEXPR bool is_iec559 = false;
     275             : 
     276             :     /** True if the set of values representable by the type is
     277             :         finite.  All built-in types are bounded, this member would be
     278             :         false for arbitrary precision types. */
     279             :     static _GLIBCXX_USE_CONSTEXPR bool is_bounded = false;
     280             : 
     281             :     /** True if the type is @e modulo. A type is modulo if, for any
     282             :         operation involving +, -, or * on values of that type whose
     283             :         result would fall outside the range [min(),max()], the value
     284             :         returned differs from the true value by an integer multiple of
     285             :         max() - min() + 1. On most machines, this is false for floating
     286             :         types, true for unsigned integers, and true for signed integers.
     287             :         See PR22200 about signed integers.  */
     288             :     static _GLIBCXX_USE_CONSTEXPR bool is_modulo = false;
     289             : 
     290             :     /** True if trapping is implemented for this type.  */
     291             :     static _GLIBCXX_USE_CONSTEXPR bool traps = false;
     292             : 
     293             :     /** True if tininess is detected before rounding.  (see IEC 559)  */
     294             :     static _GLIBCXX_USE_CONSTEXPR bool tinyness_before = false;
     295             : 
     296             :     /** See std::float_round_style for more information.  This is only
     297             :         meaningful for floating types; integer types will all be
     298             :         round_toward_zero.  */
     299             :     static _GLIBCXX_USE_CONSTEXPR float_round_style round_style =
     300             :                                                     round_toward_zero;
     301             :   };
     302             : 
     303             :   /**
     304             :    *  @brief Properties of fundamental types.
     305             :    *
     306             :    *  This class allows a program to obtain information about the
     307             :    *  representation of a fundamental type on a given platform.  For
     308             :    *  non-fundamental types, the functions will return 0 and the data
     309             :    *  members will all be @c false.
     310             :   */
     311             :   template<typename _Tp>
     312             :     struct numeric_limits : public __numeric_limits_base
     313             :     {
     314             :       /** The minimum finite value, or for floating types with
     315             :           denormalization, the minimum positive normalized value.  */
     316             :       static _GLIBCXX_CONSTEXPR _Tp
     317             :       min() _GLIBCXX_USE_NOEXCEPT { return _Tp(); }
     318             : 
     319             :       /** The maximum finite value.  */
     320             :       static _GLIBCXX_CONSTEXPR _Tp
     321             :       max() _GLIBCXX_USE_NOEXCEPT { return _Tp(); }
     322             : 
     323             : #if __cplusplus >= 201103L
     324             :       /** A finite value x such that there is no other finite value y
     325             :        *  where y < x.  */
     326             :       static constexpr _Tp
     327             :       lowest() noexcept { return _Tp(); }
     328             : #endif
     329             : 
     330             :       /** The @e machine @e epsilon:  the difference between 1 and the least
     331             :           value greater than 1 that is representable.  */
     332             :       static _GLIBCXX_CONSTEXPR _Tp
     333             :       epsilon() _GLIBCXX_USE_NOEXCEPT { return _Tp(); }
     334             : 
     335             :       /** The maximum rounding error measurement (see LIA-1).  */
     336             :       static _GLIBCXX_CONSTEXPR _Tp
     337             :       round_error() _GLIBCXX_USE_NOEXCEPT { return _Tp(); }
     338             : 
     339             :       /** The representation of positive infinity, if @c has_infinity.  */
     340             :       static _GLIBCXX_CONSTEXPR _Tp
     341             :       infinity() _GLIBCXX_USE_NOEXCEPT { return _Tp(); }
     342             : 
     343             :       /** The representation of a quiet Not a Number,
     344             :           if @c has_quiet_NaN. */
     345             :       static _GLIBCXX_CONSTEXPR _Tp
     346             :       quiet_NaN() _GLIBCXX_USE_NOEXCEPT { return _Tp(); }
     347             : 
     348             :       /** The representation of a signaling Not a Number, if
     349             :           @c has_signaling_NaN. */
     350             :       static _GLIBCXX_CONSTEXPR _Tp
     351             :       signaling_NaN() _GLIBCXX_USE_NOEXCEPT { return _Tp(); }
     352             : 
     353             :       /** The minimum positive denormalized value.  For types where
     354             :           @c has_denorm is false, this is the minimum positive normalized
     355             :           value.  */
     356             :       static _GLIBCXX_CONSTEXPR _Tp
     357             :       denorm_min() _GLIBCXX_USE_NOEXCEPT { return _Tp(); }
     358             :     };
     359             : 
     360             :   // _GLIBCXX_RESOLVE_LIB_DEFECTS
     361             :   // 559. numeric_limits<const T>
     362             : 
     363             :   template<typename _Tp>
     364             :     struct numeric_limits<const _Tp>
     365             :     : public numeric_limits<_Tp> { };
     366             : 
     367             :   template<typename _Tp>
     368             :     struct numeric_limits<volatile _Tp>
     369             :     : public numeric_limits<_Tp> { };
     370             : 
     371             :   template<typename _Tp>
     372             :     struct numeric_limits<const volatile _Tp>
     373             :     : public numeric_limits<_Tp> { };
     374             : 
     375             :   // Now there follow 16 explicit specializations.  Yes, 16.  Make sure
     376             :   // you get the count right. (18 in C++11 mode, with char16_t and char32_t.)
     377             :   // (+1 if char8_t is enabled.)
     378             : 
     379             :   // _GLIBCXX_RESOLVE_LIB_DEFECTS
     380             :   // 184. numeric_limits<bool> wording problems
     381             : 
     382             :   /// numeric_limits<bool> specialization.
     383             :   template<>
     384             :     struct numeric_limits<bool>
     385             :     {
     386             :       static _GLIBCXX_USE_CONSTEXPR bool is_specialized = true;
     387             : 
     388             :       static _GLIBCXX_CONSTEXPR bool
     389             :       min() _GLIBCXX_USE_NOEXCEPT { return false; }
     390             : 
     391             :       static _GLIBCXX_CONSTEXPR bool
     392             :       max() _GLIBCXX_USE_NOEXCEPT { return true; }
     393             : 
     394             : #if __cplusplus >= 201103L
     395             :       static constexpr bool
     396             :       lowest() noexcept { return min(); }
     397             : #endif
     398             :       static _GLIBCXX_USE_CONSTEXPR int digits = 1;
     399             :       static _GLIBCXX_USE_CONSTEXPR int digits10 = 0;
     400             : #if __cplusplus >= 201103L
     401             :       static constexpr int max_digits10 = 0;
     402             : #endif
     403             :       static _GLIBCXX_USE_CONSTEXPR bool is_signed = false;
     404             :       static _GLIBCXX_USE_CONSTEXPR bool is_integer = true;
     405             :       static _GLIBCXX_USE_CONSTEXPR bool is_exact = true;
     406             :       static _GLIBCXX_USE_CONSTEXPR int radix = 2;
     407             : 
     408             :       static _GLIBCXX_CONSTEXPR bool
     409             :       epsilon() _GLIBCXX_USE_NOEXCEPT { return false; }
     410             : 
     411             :       static _GLIBCXX_CONSTEXPR bool
     412             :       round_error() _GLIBCXX_USE_NOEXCEPT { return false; }
     413             : 
     414             :       static _GLIBCXX_USE_CONSTEXPR int min_exponent = 0;
     415             :       static _GLIBCXX_USE_CONSTEXPR int min_exponent10 = 0;
     416             :       static _GLIBCXX_USE_CONSTEXPR int max_exponent = 0;
     417             :       static _GLIBCXX_USE_CONSTEXPR int max_exponent10 = 0;
     418             : 
     419             :       static _GLIBCXX_USE_CONSTEXPR bool has_infinity = false;
     420             :       static _GLIBCXX_USE_CONSTEXPR bool has_quiet_NaN = false;
     421             :       static _GLIBCXX_USE_CONSTEXPR bool has_signaling_NaN = false;
     422             :       static _GLIBCXX_USE_CONSTEXPR float_denorm_style has_denorm
     423             :        = denorm_absent;
     424             :       static _GLIBCXX_USE_CONSTEXPR bool has_denorm_loss = false;
     425             : 
     426             :       static _GLIBCXX_CONSTEXPR bool
     427             :       infinity() _GLIBCXX_USE_NOEXCEPT { return false; }
     428             : 
     429             :       static _GLIBCXX_CONSTEXPR bool
     430             :       quiet_NaN() _GLIBCXX_USE_NOEXCEPT { return false; }
     431             : 
     432             :       static _GLIBCXX_CONSTEXPR bool
     433             :       signaling_NaN() _GLIBCXX_USE_NOEXCEPT { return false; }
     434             : 
     435             :       static _GLIBCXX_CONSTEXPR bool
     436             :       denorm_min() _GLIBCXX_USE_NOEXCEPT { return false; }
     437             : 
     438             :       static _GLIBCXX_USE_CONSTEXPR bool is_iec559 = false;
     439             :       static _GLIBCXX_USE_CONSTEXPR bool is_bounded = true;
     440             :       static _GLIBCXX_USE_CONSTEXPR bool is_modulo = false;
     441             : 
     442             :       // It is not clear what it means for a boolean type to trap.
     443             :       // This is a DR on the LWG issue list.  Here, I use integer
     444             :       // promotion semantics.
     445             :       static _GLIBCXX_USE_CONSTEXPR bool traps = __glibcxx_integral_traps;
     446             :       static _GLIBCXX_USE_CONSTEXPR bool tinyness_before = false;
     447             :       static _GLIBCXX_USE_CONSTEXPR float_round_style round_style
     448             :        = round_toward_zero;
     449             :     };
     450             : 
     451             :   /// numeric_limits<char> specialization.
     452             :   template<>
     453             :     struct numeric_limits<char>
     454             :     {
     455             :       static _GLIBCXX_USE_CONSTEXPR bool is_specialized = true;
     456             : 
     457             :       static _GLIBCXX_CONSTEXPR char
     458             :       min() _GLIBCXX_USE_NOEXCEPT { return __glibcxx_min(char); }
     459             : 
     460             :       static _GLIBCXX_CONSTEXPR char
     461           0 :       max() _GLIBCXX_USE_NOEXCEPT { return __glibcxx_max(char); }
     462             : 
     463             : #if __cplusplus >= 201103L
     464             :       static constexpr char
     465             :       lowest() noexcept { return min(); }
     466             : #endif
     467             : 
     468             :       static _GLIBCXX_USE_CONSTEXPR int digits = __glibcxx_digits (char);
     469             :       static _GLIBCXX_USE_CONSTEXPR int digits10 = __glibcxx_digits10 (char);
     470             : #if __cplusplus >= 201103L
     471             :       static constexpr int max_digits10 = 0;
     472             : #endif
     473             :       static _GLIBCXX_USE_CONSTEXPR bool is_signed = __glibcxx_signed (char);
     474             :       static _GLIBCXX_USE_CONSTEXPR bool is_integer = true;
     475             :       static _GLIBCXX_USE_CONSTEXPR bool is_exact = true;
     476             :       static _GLIBCXX_USE_CONSTEXPR int radix = 2;
     477             : 
     478             :       static _GLIBCXX_CONSTEXPR char
     479             :       epsilon() _GLIBCXX_USE_NOEXCEPT { return 0; }
     480             : 
     481             :       static _GLIBCXX_CONSTEXPR char
     482             :       round_error() _GLIBCXX_USE_NOEXCEPT { return 0; }
     483             : 
     484             :       static _GLIBCXX_USE_CONSTEXPR int min_exponent = 0;
     485             :       static _GLIBCXX_USE_CONSTEXPR int min_exponent10 = 0;
     486             :       static _GLIBCXX_USE_CONSTEXPR int max_exponent = 0;
     487             :       static _GLIBCXX_USE_CONSTEXPR int max_exponent10 = 0;
     488             : 
     489             :       static _GLIBCXX_USE_CONSTEXPR bool has_infinity = false;
     490             :       static _GLIBCXX_USE_CONSTEXPR bool has_quiet_NaN = false;
     491             :       static _GLIBCXX_USE_CONSTEXPR bool has_signaling_NaN = false;
     492             :       static _GLIBCXX_USE_CONSTEXPR float_denorm_style has_denorm
     493             :        = denorm_absent;
     494             :       static _GLIBCXX_USE_CONSTEXPR bool has_denorm_loss = false;
     495             : 
     496             :       static _GLIBCXX_CONSTEXPR
     497             :       char infinity() _GLIBCXX_USE_NOEXCEPT { return char(); }
     498             : 
     499             :       static _GLIBCXX_CONSTEXPR char
     500             :       quiet_NaN() _GLIBCXX_USE_NOEXCEPT { return char(); }
     501             : 
     502             :       static _GLIBCXX_CONSTEXPR char
     503             :       signaling_NaN() _GLIBCXX_USE_NOEXCEPT { return char(); }
     504             : 
     505             :       static _GLIBCXX_CONSTEXPR char
     506             :       denorm_min() _GLIBCXX_USE_NOEXCEPT { return static_cast<char>(0); }
     507             : 
     508             :       static _GLIBCXX_USE_CONSTEXPR bool is_iec559 = false;
     509             :       static _GLIBCXX_USE_CONSTEXPR bool is_bounded = true;
     510             :       static _GLIBCXX_USE_CONSTEXPR bool is_modulo = !is_signed;
     511             : 
     512             :       static _GLIBCXX_USE_CONSTEXPR bool traps = __glibcxx_integral_traps;
     513             :       static _GLIBCXX_USE_CONSTEXPR bool tinyness_before = false;
     514             :       static _GLIBCXX_USE_CONSTEXPR float_round_style round_style
     515             :        = round_toward_zero;
     516             :     };
     517             : 
     518             :   /// numeric_limits<signed char> specialization.
     519             :   template<>
     520             :     struct numeric_limits<signed char>
     521             :     {
     522             :       static _GLIBCXX_USE_CONSTEXPR bool is_specialized = true;
     523             : 
     524             :       static _GLIBCXX_CONSTEXPR signed char
     525             :       min() _GLIBCXX_USE_NOEXCEPT { return -__SCHAR_MAX__ - 1; }
     526             : 
     527             :       static _GLIBCXX_CONSTEXPR signed char
     528             :       max() _GLIBCXX_USE_NOEXCEPT { return __SCHAR_MAX__; }
     529             : 
     530             : #if __cplusplus >= 201103L
     531             :       static constexpr signed char
     532             :       lowest() noexcept { return min(); }
     533             : #endif
     534             : 
     535             :       static _GLIBCXX_USE_CONSTEXPR int digits = __glibcxx_digits (signed char);
     536             :       static _GLIBCXX_USE_CONSTEXPR int digits10
     537             :        = __glibcxx_digits10 (signed char);
     538             : #if __cplusplus >= 201103L
     539             :       static constexpr int max_digits10 = 0;
     540             : #endif
     541             :       static _GLIBCXX_USE_CONSTEXPR bool is_signed = true;
     542             :       static _GLIBCXX_USE_CONSTEXPR bool is_integer = true;
     543             :       static _GLIBCXX_USE_CONSTEXPR bool is_exact = true;
     544             :       static _GLIBCXX_USE_CONSTEXPR int radix = 2;
     545             : 
     546             :       static _GLIBCXX_CONSTEXPR signed char
     547             :       epsilon() _GLIBCXX_USE_NOEXCEPT { return 0; }
     548             : 
     549             :       static _GLIBCXX_CONSTEXPR signed char
     550             :       round_error() _GLIBCXX_USE_NOEXCEPT { return 0; }
     551             : 
     552             :       static _GLIBCXX_USE_CONSTEXPR int min_exponent = 0;
     553             :       static _GLIBCXX_USE_CONSTEXPR int min_exponent10 = 0;
     554             :       static _GLIBCXX_USE_CONSTEXPR int max_exponent = 0;
     555             :       static _GLIBCXX_USE_CONSTEXPR int max_exponent10 = 0;
     556             : 
     557             :       static _GLIBCXX_USE_CONSTEXPR bool has_infinity = false;
     558             :       static _GLIBCXX_USE_CONSTEXPR bool has_quiet_NaN = false;
     559             :       static _GLIBCXX_USE_CONSTEXPR bool has_signaling_NaN = false;
     560             :       static _GLIBCXX_USE_CONSTEXPR float_denorm_style has_denorm
     561             :        = denorm_absent;
     562             :       static _GLIBCXX_USE_CONSTEXPR bool has_denorm_loss = false;
     563             : 
     564             :       static _GLIBCXX_CONSTEXPR signed char
     565             :       infinity() _GLIBCXX_USE_NOEXCEPT { return static_cast<signed char>(0); }
     566             : 
     567             :       static _GLIBCXX_CONSTEXPR signed char
     568             :       quiet_NaN() _GLIBCXX_USE_NOEXCEPT { return static_cast<signed char>(0); }
     569             : 
     570             :       static _GLIBCXX_CONSTEXPR signed char
     571             :       signaling_NaN() _GLIBCXX_USE_NOEXCEPT
     572             :       { return static_cast<signed char>(0); }
     573             : 
     574             :       static _GLIBCXX_CONSTEXPR signed char
     575             :       denorm_min() _GLIBCXX_USE_NOEXCEPT
     576             :       { return static_cast<signed char>(0); }
     577             : 
     578             :       static _GLIBCXX_USE_CONSTEXPR bool is_iec559 = false;
     579             :       static _GLIBCXX_USE_CONSTEXPR bool is_bounded = true;
     580             :       static _GLIBCXX_USE_CONSTEXPR bool is_modulo = false;
     581             : 
     582             :       static _GLIBCXX_USE_CONSTEXPR bool traps = __glibcxx_integral_traps;
     583             :       static _GLIBCXX_USE_CONSTEXPR bool tinyness_before = false;
     584             :       static _GLIBCXX_USE_CONSTEXPR float_round_style round_style
     585             :        = round_toward_zero;
     586             :     };
     587             : 
     588             :   /// numeric_limits<unsigned char> specialization.
     589             :   template<>
     590             :     struct numeric_limits<unsigned char>
     591             :     {
     592             :       static _GLIBCXX_USE_CONSTEXPR bool is_specialized = true;
     593             : 
     594             :       static _GLIBCXX_CONSTEXPR unsigned char
     595             :       min() _GLIBCXX_USE_NOEXCEPT { return 0; }
     596             : 
     597             :       static _GLIBCXX_CONSTEXPR unsigned char
     598        2576 :       max() _GLIBCXX_USE_NOEXCEPT { return __SCHAR_MAX__ * 2U + 1; }
     599             : 
     600             : #if __cplusplus >= 201103L
     601             :       static constexpr unsigned char
     602             :       lowest() noexcept { return min(); }
     603             : #endif
     604             : 
     605             :       static _GLIBCXX_USE_CONSTEXPR int digits
     606             :        = __glibcxx_digits (unsigned char);
     607             :       static _GLIBCXX_USE_CONSTEXPR int digits10
     608             :        = __glibcxx_digits10 (unsigned char);
     609             : #if __cplusplus >= 201103L
     610             :       static constexpr int max_digits10 = 0;
     611             : #endif
     612             :       static _GLIBCXX_USE_CONSTEXPR bool is_signed = false;
     613             :       static _GLIBCXX_USE_CONSTEXPR bool is_integer = true;
     614             :       static _GLIBCXX_USE_CONSTEXPR bool is_exact = true;
     615             :       static _GLIBCXX_USE_CONSTEXPR int radix = 2;
     616             : 
     617             :       static _GLIBCXX_CONSTEXPR unsigned char
     618             :       epsilon() _GLIBCXX_USE_NOEXCEPT { return 0; }
     619             : 
     620             :       static _GLIBCXX_CONSTEXPR unsigned char
     621             :       round_error() _GLIBCXX_USE_NOEXCEPT { return 0; }
     622             : 
     623             :       static _GLIBCXX_USE_CONSTEXPR int min_exponent = 0;
     624             :       static _GLIBCXX_USE_CONSTEXPR int min_exponent10 = 0;
     625             :       static _GLIBCXX_USE_CONSTEXPR int max_exponent = 0;
     626             :       static _GLIBCXX_USE_CONSTEXPR int max_exponent10 = 0;
     627             : 
     628             :       static _GLIBCXX_USE_CONSTEXPR bool has_infinity = false;
     629             :       static _GLIBCXX_USE_CONSTEXPR bool has_quiet_NaN = false;
     630             :       static _GLIBCXX_USE_CONSTEXPR bool has_signaling_NaN = false;
     631             :       static _GLIBCXX_USE_CONSTEXPR float_denorm_style has_denorm
     632             :        = denorm_absent;
     633             :       static _GLIBCXX_USE_CONSTEXPR bool has_denorm_loss = false;
     634             : 
     635             :       static _GLIBCXX_CONSTEXPR unsigned char
     636             :       infinity() _GLIBCXX_USE_NOEXCEPT
     637             :       { return static_cast<unsigned char>(0); }
     638             : 
     639             :       static _GLIBCXX_CONSTEXPR unsigned char
     640             :       quiet_NaN() _GLIBCXX_USE_NOEXCEPT
     641             :       { return static_cast<unsigned char>(0); }
     642             : 
     643             :       static _GLIBCXX_CONSTEXPR unsigned char
     644             :       signaling_NaN() _GLIBCXX_USE_NOEXCEPT
     645             :       { return static_cast<unsigned char>(0); }
     646             : 
     647             :       static _GLIBCXX_CONSTEXPR unsigned char
     648             :       denorm_min() _GLIBCXX_USE_NOEXCEPT
     649             :       { return static_cast<unsigned char>(0); }
     650             : 
     651             :       static _GLIBCXX_USE_CONSTEXPR bool is_iec559 = false;
     652             :       static _GLIBCXX_USE_CONSTEXPR bool is_bounded = true;
     653             :       static _GLIBCXX_USE_CONSTEXPR bool is_modulo = true;
     654             : 
     655             :       static _GLIBCXX_USE_CONSTEXPR bool traps = __glibcxx_integral_traps;
     656             :       static _GLIBCXX_USE_CONSTEXPR bool tinyness_before = false;
     657             :       static _GLIBCXX_USE_CONSTEXPR float_round_style round_style
     658             :        = round_toward_zero;
     659             :     };
     660             : 
     661             :   /// numeric_limits<wchar_t> specialization.
     662             :   template<>
     663             :     struct numeric_limits<wchar_t>
     664             :     {
     665             :       static _GLIBCXX_USE_CONSTEXPR bool is_specialized = true;
     666             : 
     667             :       static _GLIBCXX_CONSTEXPR wchar_t
     668             :       min() _GLIBCXX_USE_NOEXCEPT { return __glibcxx_min (wchar_t); }
     669             : 
     670             :       static _GLIBCXX_CONSTEXPR wchar_t
     671             :       max() _GLIBCXX_USE_NOEXCEPT { return __glibcxx_max (wchar_t); }
     672             : 
     673             : #if __cplusplus >= 201103L
     674             :       static constexpr wchar_t
     675             :       lowest() noexcept { return min(); }
     676             : #endif
     677             : 
     678             :       static _GLIBCXX_USE_CONSTEXPR int digits = __glibcxx_digits (wchar_t);
     679             :       static _GLIBCXX_USE_CONSTEXPR int digits10
     680             :        = __glibcxx_digits10 (wchar_t);
     681             : #if __cplusplus >= 201103L
     682             :       static constexpr int max_digits10 = 0;
     683             : #endif
     684             :       static _GLIBCXX_USE_CONSTEXPR bool is_signed = __glibcxx_signed (wchar_t);
     685             :       static _GLIBCXX_USE_CONSTEXPR bool is_integer = true;
     686             :       static _GLIBCXX_USE_CONSTEXPR bool is_exact = true;
     687             :       static _GLIBCXX_USE_CONSTEXPR int radix = 2;
     688             : 
     689             :       static _GLIBCXX_CONSTEXPR wchar_t
     690             :       epsilon() _GLIBCXX_USE_NOEXCEPT { return 0; }
     691             : 
     692             :       static _GLIBCXX_CONSTEXPR wchar_t
     693             :       round_error() _GLIBCXX_USE_NOEXCEPT { return 0; }
     694             : 
     695             :       static _GLIBCXX_USE_CONSTEXPR int min_exponent = 0;
     696             :       static _GLIBCXX_USE_CONSTEXPR int min_exponent10 = 0;
     697             :       static _GLIBCXX_USE_CONSTEXPR int max_exponent = 0;
     698             :       static _GLIBCXX_USE_CONSTEXPR int max_exponent10 = 0;
     699             : 
     700             :       static _GLIBCXX_USE_CONSTEXPR bool has_infinity = false;
     701             :       static _GLIBCXX_USE_CONSTEXPR bool has_quiet_NaN = false;
     702             :       static _GLIBCXX_USE_CONSTEXPR bool has_signaling_NaN = false;
     703             :       static _GLIBCXX_USE_CONSTEXPR float_denorm_style has_denorm
     704             :        = denorm_absent;
     705             :       static _GLIBCXX_USE_CONSTEXPR bool has_denorm_loss = false;
     706             : 
     707             :       static _GLIBCXX_CONSTEXPR wchar_t
     708             :       infinity() _GLIBCXX_USE_NOEXCEPT { return wchar_t(); }
     709             : 
     710             :       static _GLIBCXX_CONSTEXPR wchar_t
     711             :       quiet_NaN() _GLIBCXX_USE_NOEXCEPT { return wchar_t(); }
     712             : 
     713             :       static _GLIBCXX_CONSTEXPR wchar_t
     714             :       signaling_NaN() _GLIBCXX_USE_NOEXCEPT { return wchar_t(); }
     715             : 
     716             :       static _GLIBCXX_CONSTEXPR wchar_t
     717             :       denorm_min() _GLIBCXX_USE_NOEXCEPT { return wchar_t(); }
     718             : 
     719             :       static _GLIBCXX_USE_CONSTEXPR bool is_iec559 = false;
     720             :       static _GLIBCXX_USE_CONSTEXPR bool is_bounded = true;
     721             :       static _GLIBCXX_USE_CONSTEXPR bool is_modulo = !is_signed;
     722             : 
     723             :       static _GLIBCXX_USE_CONSTEXPR bool traps = __glibcxx_integral_traps;
     724             :       static _GLIBCXX_USE_CONSTEXPR bool tinyness_before = false;
     725             :       static _GLIBCXX_USE_CONSTEXPR float_round_style round_style
     726             :        = round_toward_zero;
     727             :     };
     728             : 
     729             : #if _GLIBCXX_USE_CHAR8_T
     730             :   /// numeric_limits<char8_t> specialization.
     731             :   template<>
     732             :     struct numeric_limits<char8_t>
     733             :     {
     734             :       static _GLIBCXX_USE_CONSTEXPR bool is_specialized = true;
     735             : 
     736             :       static _GLIBCXX_CONSTEXPR char8_t
     737             :       min() _GLIBCXX_USE_NOEXCEPT { return __glibcxx_min (char8_t); }
     738             : 
     739             :       static _GLIBCXX_CONSTEXPR char8_t
     740             :       max() _GLIBCXX_USE_NOEXCEPT { return __glibcxx_max (char8_t); }
     741             : 
     742             :       static _GLIBCXX_CONSTEXPR char8_t
     743             :       lowest() _GLIBCXX_USE_NOEXCEPT { return min(); }
     744             : 
     745             :       static _GLIBCXX_USE_CONSTEXPR int digits = __glibcxx_digits (char8_t);
     746             :       static _GLIBCXX_USE_CONSTEXPR int digits10 = __glibcxx_digits10 (char8_t);
     747             :       static _GLIBCXX_USE_CONSTEXPR int max_digits10 = 0;
     748             :       static _GLIBCXX_USE_CONSTEXPR bool is_signed = __glibcxx_signed (char8_t);
     749             :       static _GLIBCXX_USE_CONSTEXPR bool is_integer = true;
     750             :       static _GLIBCXX_USE_CONSTEXPR bool is_exact = true;
     751             :       static _GLIBCXX_USE_CONSTEXPR int radix = 2;
     752             : 
     753             :       static _GLIBCXX_CONSTEXPR char8_t
     754             :       epsilon() _GLIBCXX_USE_NOEXCEPT { return 0; }
     755             : 
     756             :       static _GLIBCXX_CONSTEXPR char8_t
     757             :       round_error() _GLIBCXX_USE_NOEXCEPT { return 0; }
     758             : 
     759             :       static _GLIBCXX_USE_CONSTEXPR int min_exponent = 0;
     760             :       static _GLIBCXX_USE_CONSTEXPR int min_exponent10 = 0;
     761             :       static _GLIBCXX_USE_CONSTEXPR int max_exponent = 0;
     762             :       static _GLIBCXX_USE_CONSTEXPR int max_exponent10 = 0;
     763             : 
     764             :       static _GLIBCXX_USE_CONSTEXPR bool has_infinity = false;
     765             :       static _GLIBCXX_USE_CONSTEXPR bool has_quiet_NaN = false;
     766             :       static _GLIBCXX_USE_CONSTEXPR bool has_signaling_NaN = false;
     767             :       static _GLIBCXX_USE_CONSTEXPR float_denorm_style has_denorm
     768             :         = denorm_absent;
     769             :       static _GLIBCXX_USE_CONSTEXPR bool has_denorm_loss = false;
     770             : 
     771             :       static _GLIBCXX_CONSTEXPR char8_t
     772             :       infinity() _GLIBCXX_USE_NOEXCEPT { return char8_t(); }
     773             : 
     774             :       static _GLIBCXX_CONSTEXPR char8_t
     775             :       quiet_NaN() _GLIBCXX_USE_NOEXCEPT { return char8_t(); }
     776             : 
     777             :       static _GLIBCXX_CONSTEXPR char8_t
     778             :       signaling_NaN() _GLIBCXX_USE_NOEXCEPT { return char8_t(); }
     779             : 
     780             :       static _GLIBCXX_CONSTEXPR char8_t
     781             :       denorm_min() _GLIBCXX_USE_NOEXCEPT { return char8_t(); }
     782             : 
     783             :       static _GLIBCXX_USE_CONSTEXPR bool is_iec559 = false;
     784             :       static _GLIBCXX_USE_CONSTEXPR bool is_bounded = true;
     785             :       static _GLIBCXX_USE_CONSTEXPR bool is_modulo = !is_signed;
     786             : 
     787             :       static _GLIBCXX_USE_CONSTEXPR bool traps = __glibcxx_integral_traps;
     788             :       static _GLIBCXX_USE_CONSTEXPR bool tinyness_before = false;
     789             :       static _GLIBCXX_USE_CONSTEXPR float_round_style round_style
     790             :         = round_toward_zero;
     791             :     };
     792             : #endif
     793             : 
     794             : #if __cplusplus >= 201103L
     795             :   /// numeric_limits<char16_t> specialization.
     796             :   template<>
     797             :     struct numeric_limits<char16_t>
     798             :     {
     799             :       static constexpr bool is_specialized = true;
     800             : 
     801             :       static constexpr char16_t
     802             :       min() noexcept { return __glibcxx_min (char16_t); }
     803             : 
     804             :       static constexpr char16_t
     805             :       max() noexcept { return __glibcxx_max (char16_t); }
     806             : 
     807             :       static constexpr char16_t
     808             :       lowest() noexcept { return min(); }
     809             : 
     810             :       static constexpr int digits = __glibcxx_digits (char16_t);
     811             :       static constexpr int digits10 = __glibcxx_digits10 (char16_t);
     812             :       static constexpr int max_digits10 = 0;
     813             :       static constexpr bool is_signed = __glibcxx_signed (char16_t);
     814             :       static constexpr bool is_integer = true;
     815             :       static constexpr bool is_exact = true;
     816             :       static constexpr int radix = 2;
     817             : 
     818             :       static constexpr char16_t
     819             :       epsilon() noexcept { return 0; }
     820             : 
     821             :       static constexpr char16_t
     822             :       round_error() noexcept { return 0; }
     823             : 
     824             :       static constexpr int min_exponent = 0;
     825             :       static constexpr int min_exponent10 = 0;
     826             :       static constexpr int max_exponent = 0;
     827             :       static constexpr int max_exponent10 = 0;
     828             : 
     829             :       static constexpr bool has_infinity = false;
     830             :       static constexpr bool has_quiet_NaN = false;
     831             :       static constexpr bool has_signaling_NaN = false;
     832             :       static constexpr float_denorm_style has_denorm = denorm_absent;
     833             :       static constexpr bool has_denorm_loss = false;
     834             : 
     835             :       static constexpr char16_t
     836             :       infinity() noexcept { return char16_t(); }
     837             : 
     838             :       static constexpr char16_t
     839             :       quiet_NaN() noexcept { return char16_t(); }
     840             : 
     841             :       static constexpr char16_t
     842             :       signaling_NaN() noexcept { return char16_t(); }
     843             : 
     844             :       static constexpr char16_t
     845             :       denorm_min() noexcept { return char16_t(); }
     846             : 
     847             :       static constexpr bool is_iec559 = false;
     848             :       static constexpr bool is_bounded = true;
     849             :       static constexpr bool is_modulo = !is_signed;
     850             : 
     851             :       static constexpr bool traps = __glibcxx_integral_traps;
     852             :       static constexpr bool tinyness_before = false;
     853             :       static constexpr float_round_style round_style = round_toward_zero;
     854             :     };
     855             : 
     856             :   /// numeric_limits<char32_t> specialization.
     857             :   template<>
     858             :     struct numeric_limits<char32_t>
     859             :     {
     860             :       static constexpr bool is_specialized = true;
     861             : 
     862             :       static constexpr char32_t
     863             :       min() noexcept { return __glibcxx_min (char32_t); }
     864             : 
     865             :       static constexpr char32_t
     866             :       max() noexcept { return __glibcxx_max (char32_t); }
     867             : 
     868             :       static constexpr char32_t
     869             :       lowest() noexcept { return min(); }
     870             : 
     871             :       static constexpr int digits = __glibcxx_digits (char32_t);
     872             :       static constexpr int digits10 = __glibcxx_digits10 (char32_t);
     873             :       static constexpr int max_digits10 = 0;
     874             :       static constexpr bool is_signed = __glibcxx_signed (char32_t);
     875             :       static constexpr bool is_integer = true;
     876             :       static constexpr bool is_exact = true;
     877             :       static constexpr int radix = 2;
     878             : 
     879             :       static constexpr char32_t
     880             :       epsilon() noexcept { return 0; }
     881             : 
     882             :       static constexpr char32_t
     883             :       round_error() noexcept { return 0; }
     884             : 
     885             :       static constexpr int min_exponent = 0;
     886             :       static constexpr int min_exponent10 = 0;
     887             :       static constexpr int max_exponent = 0;
     888             :       static constexpr int max_exponent10 = 0;
     889             : 
     890             :       static constexpr bool has_infinity = false;
     891             :       static constexpr bool has_quiet_NaN = false;
     892             :       static constexpr bool has_signaling_NaN = false;
     893             :       static constexpr float_denorm_style has_denorm = denorm_absent;
     894             :       static constexpr bool has_denorm_loss = false;
     895             : 
     896             :       static constexpr char32_t
     897             :       infinity() noexcept { return char32_t(); }
     898             : 
     899             :       static constexpr char32_t
     900             :       quiet_NaN() noexcept { return char32_t(); }
     901             : 
     902             :       static constexpr char32_t
     903             :       signaling_NaN() noexcept { return char32_t(); }
     904             : 
     905             :       static constexpr char32_t
     906             :       denorm_min() noexcept { return char32_t(); }
     907             : 
     908             :       static constexpr bool is_iec559 = false;
     909             :       static constexpr bool is_bounded = true;
     910             :       static constexpr bool is_modulo = !is_signed;
     911             : 
     912             :       static constexpr bool traps = __glibcxx_integral_traps;
     913             :       static constexpr bool tinyness_before = false;
     914             :       static constexpr float_round_style round_style = round_toward_zero;
     915             :     };
     916             : #endif
     917             : 
     918             :   /// numeric_limits<short> specialization.
     919             :   template<>
     920             :     struct numeric_limits<short>
     921             :     {
     922             :       static _GLIBCXX_USE_CONSTEXPR bool is_specialized = true;
     923             : 
     924             :       static _GLIBCXX_CONSTEXPR short
     925        1922 :       min() _GLIBCXX_USE_NOEXCEPT { return -__SHRT_MAX__ - 1; }
     926             : 
     927             :       static _GLIBCXX_CONSTEXPR short
     928        1922 :       max() _GLIBCXX_USE_NOEXCEPT { return __SHRT_MAX__; }
     929             : 
     930             : #if __cplusplus >= 201103L
     931             :       static constexpr short
     932             :       lowest() noexcept { return min(); }
     933             : #endif
     934             : 
     935             :       static _GLIBCXX_USE_CONSTEXPR int digits = __glibcxx_digits (short);
     936             :       static _GLIBCXX_USE_CONSTEXPR int digits10 = __glibcxx_digits10 (short);
     937             : #if __cplusplus >= 201103L
     938             :       static constexpr int max_digits10 = 0;
     939             : #endif
     940             :       static _GLIBCXX_USE_CONSTEXPR bool is_signed = true;
     941             :       static _GLIBCXX_USE_CONSTEXPR bool is_integer = true;
     942             :       static _GLIBCXX_USE_CONSTEXPR bool is_exact = true;
     943             :       static _GLIBCXX_USE_CONSTEXPR int radix = 2;
     944             : 
     945             :       static _GLIBCXX_CONSTEXPR short
     946             :       epsilon() _GLIBCXX_USE_NOEXCEPT { return 0; }
     947             : 
     948             :       static _GLIBCXX_CONSTEXPR short
     949             :       round_error() _GLIBCXX_USE_NOEXCEPT { return 0; }
     950             : 
     951             :       static _GLIBCXX_USE_CONSTEXPR int min_exponent = 0;
     952             :       static _GLIBCXX_USE_CONSTEXPR int min_exponent10 = 0;
     953             :       static _GLIBCXX_USE_CONSTEXPR int max_exponent = 0;
     954             :       static _GLIBCXX_USE_CONSTEXPR int max_exponent10 = 0;
     955             : 
     956             :       static _GLIBCXX_USE_CONSTEXPR bool has_infinity = false;
     957             :       static _GLIBCXX_USE_CONSTEXPR bool has_quiet_NaN = false;
     958             :       static _GLIBCXX_USE_CONSTEXPR bool has_signaling_NaN = false;
     959             :       static _GLIBCXX_USE_CONSTEXPR float_denorm_style has_denorm
     960             :        = denorm_absent;
     961             :       static _GLIBCXX_USE_CONSTEXPR bool has_denorm_loss = false;
     962             : 
     963             :       static _GLIBCXX_CONSTEXPR short
     964             :       infinity() _GLIBCXX_USE_NOEXCEPT { return short(); }
     965             : 
     966             :       static _GLIBCXX_CONSTEXPR short
     967             :       quiet_NaN() _GLIBCXX_USE_NOEXCEPT { return short(); }
     968             : 
     969             :       static _GLIBCXX_CONSTEXPR short
     970             :       signaling_NaN() _GLIBCXX_USE_NOEXCEPT { return short(); }
     971             : 
     972             :       static _GLIBCXX_CONSTEXPR short
     973             :       denorm_min() _GLIBCXX_USE_NOEXCEPT { return short(); }
     974             : 
     975             :       static _GLIBCXX_USE_CONSTEXPR bool is_iec559 = false;
     976             :       static _GLIBCXX_USE_CONSTEXPR bool is_bounded = true;
     977             :       static _GLIBCXX_USE_CONSTEXPR bool is_modulo = false;
     978             : 
     979             :       static _GLIBCXX_USE_CONSTEXPR bool traps = __glibcxx_integral_traps;
     980             :       static _GLIBCXX_USE_CONSTEXPR bool tinyness_before = false;
     981             :       static _GLIBCXX_USE_CONSTEXPR float_round_style round_style
     982             :        = round_toward_zero;
     983             :     };
     984             : 
     985             :   /// numeric_limits<unsigned short> specialization.
     986             :   template<>
     987             :     struct numeric_limits<unsigned short>
     988             :     {
     989             :       static _GLIBCXX_USE_CONSTEXPR bool is_specialized = true;
     990             : 
     991             :       static _GLIBCXX_CONSTEXPR unsigned short
     992             :       min() _GLIBCXX_USE_NOEXCEPT { return 0; }
     993             : 
     994             :       static _GLIBCXX_CONSTEXPR unsigned short
     995             :       max() _GLIBCXX_USE_NOEXCEPT { return __SHRT_MAX__ * 2U + 1; }
     996             : 
     997             : #if __cplusplus >= 201103L
     998             :       static constexpr unsigned short
     999             :       lowest() noexcept { return min(); }
    1000             : #endif
    1001             : 
    1002             :       static _GLIBCXX_USE_CONSTEXPR int digits
    1003             :        = __glibcxx_digits (unsigned short);
    1004             :       static _GLIBCXX_USE_CONSTEXPR int digits10
    1005             :        = __glibcxx_digits10 (unsigned short);
    1006             : #if __cplusplus >= 201103L
    1007             :       static constexpr int max_digits10 = 0;
    1008             : #endif
    1009             :       static _GLIBCXX_USE_CONSTEXPR bool is_signed = false;
    1010             :       static _GLIBCXX_USE_CONSTEXPR bool is_integer = true;
    1011             :       static _GLIBCXX_USE_CONSTEXPR bool is_exact = true;
    1012             :       static _GLIBCXX_USE_CONSTEXPR int radix = 2;
    1013             : 
    1014             :       static _GLIBCXX_CONSTEXPR unsigned short
    1015             :       epsilon() _GLIBCXX_USE_NOEXCEPT { return 0; }
    1016             : 
    1017             :       static _GLIBCXX_CONSTEXPR unsigned short
    1018             :       round_error() _GLIBCXX_USE_NOEXCEPT { return 0; }
    1019             : 
    1020             :       static _GLIBCXX_USE_CONSTEXPR int min_exponent = 0;
    1021             :       static _GLIBCXX_USE_CONSTEXPR int min_exponent10 = 0;
    1022             :       static _GLIBCXX_USE_CONSTEXPR int max_exponent = 0;
    1023             :       static _GLIBCXX_USE_CONSTEXPR int max_exponent10 = 0;
    1024             : 
    1025             :       static _GLIBCXX_USE_CONSTEXPR bool has_infinity = false;
    1026             :       static _GLIBCXX_USE_CONSTEXPR bool has_quiet_NaN = false;
    1027             :       static _GLIBCXX_USE_CONSTEXPR bool has_signaling_NaN = false;
    1028             :       static _GLIBCXX_USE_CONSTEXPR float_denorm_style has_denorm
    1029             :        = denorm_absent;
    1030             :       static _GLIBCXX_USE_CONSTEXPR bool has_denorm_loss = false;
    1031             : 
    1032             :       static _GLIBCXX_CONSTEXPR unsigned short
    1033             :       infinity() _GLIBCXX_USE_NOEXCEPT
    1034             :       { return static_cast<unsigned short>(0); }
    1035             : 
    1036             :       static _GLIBCXX_CONSTEXPR unsigned short
    1037             :       quiet_NaN() _GLIBCXX_USE_NOEXCEPT
    1038             :       { return static_cast<unsigned short>(0); }
    1039             : 
    1040             :       static _GLIBCXX_CONSTEXPR unsigned short
    1041             :       signaling_NaN() _GLIBCXX_USE_NOEXCEPT
    1042             :       { return static_cast<unsigned short>(0); }
    1043             : 
    1044             :       static _GLIBCXX_CONSTEXPR unsigned short
    1045             :       denorm_min() _GLIBCXX_USE_NOEXCEPT
    1046             :       { return static_cast<unsigned short>(0); }
    1047             : 
    1048             :       static _GLIBCXX_USE_CONSTEXPR bool is_iec559 = false;
    1049             :       static _GLIBCXX_USE_CONSTEXPR bool is_bounded = true;
    1050             :       static _GLIBCXX_USE_CONSTEXPR bool is_modulo = true;
    1051             : 
    1052             :       static _GLIBCXX_USE_CONSTEXPR bool traps = __glibcxx_integral_traps;
    1053             :       static _GLIBCXX_USE_CONSTEXPR bool tinyness_before = false;
    1054             :       static _GLIBCXX_USE_CONSTEXPR float_round_style round_style
    1055             :        = round_toward_zero;
    1056             :     };
    1057             : 
    1058             :   /// numeric_limits<int> specialization.
    1059             :   template<>
    1060             :     struct numeric_limits<int>
    1061             :     {
    1062             :       static _GLIBCXX_USE_CONSTEXPR bool is_specialized = true;
    1063             : 
    1064             :       static _GLIBCXX_CONSTEXPR int
    1065         292 :       min() _GLIBCXX_USE_NOEXCEPT { return -__INT_MAX__ - 1; }
    1066             : 
    1067             :       static _GLIBCXX_CONSTEXPR int
    1068        3527 :       max() _GLIBCXX_USE_NOEXCEPT { return __INT_MAX__; }
    1069             : 
    1070             : #if __cplusplus >= 201103L
    1071             :       static constexpr int
    1072             :       lowest() noexcept { return min(); }
    1073             : #endif
    1074             : 
    1075             :       static _GLIBCXX_USE_CONSTEXPR int digits = __glibcxx_digits (int);
    1076             :       static _GLIBCXX_USE_CONSTEXPR int digits10 = __glibcxx_digits10 (int);
    1077             : #if __cplusplus >= 201103L
    1078             :       static constexpr int max_digits10 = 0;
    1079             : #endif
    1080             :       static _GLIBCXX_USE_CONSTEXPR bool is_signed = true;
    1081             :       static _GLIBCXX_USE_CONSTEXPR bool is_integer = true;
    1082             :       static _GLIBCXX_USE_CONSTEXPR bool is_exact = true;
    1083             :       static _GLIBCXX_USE_CONSTEXPR int radix = 2;
    1084             : 
    1085             :       static _GLIBCXX_CONSTEXPR int
    1086             :       epsilon() _GLIBCXX_USE_NOEXCEPT { return 0; }
    1087             : 
    1088             :       static _GLIBCXX_CONSTEXPR int
    1089             :       round_error() _GLIBCXX_USE_NOEXCEPT { return 0; }
    1090             : 
    1091             :       static _GLIBCXX_USE_CONSTEXPR int min_exponent = 0;
    1092             :       static _GLIBCXX_USE_CONSTEXPR int min_exponent10 = 0;
    1093             :       static _GLIBCXX_USE_CONSTEXPR int max_exponent = 0;
    1094             :       static _GLIBCXX_USE_CONSTEXPR int max_exponent10 = 0;
    1095             : 
    1096             :       static _GLIBCXX_USE_CONSTEXPR bool has_infinity = false;
    1097             :       static _GLIBCXX_USE_CONSTEXPR bool has_quiet_NaN = false;
    1098             :       static _GLIBCXX_USE_CONSTEXPR bool has_signaling_NaN = false;
    1099             :       static _GLIBCXX_USE_CONSTEXPR float_denorm_style has_denorm
    1100             :        = denorm_absent;
    1101             :       static _GLIBCXX_USE_CONSTEXPR bool has_denorm_loss = false;
    1102             : 
    1103             :       static _GLIBCXX_CONSTEXPR int
    1104             :       infinity() _GLIBCXX_USE_NOEXCEPT { return static_cast<int>(0); }
    1105             : 
    1106             :       static _GLIBCXX_CONSTEXPR int
    1107             :       quiet_NaN() _GLIBCXX_USE_NOEXCEPT { return static_cast<int>(0); }
    1108             : 
    1109             :       static _GLIBCXX_CONSTEXPR int
    1110             :       signaling_NaN() _GLIBCXX_USE_NOEXCEPT { return static_cast<int>(0); }
    1111             : 
    1112             :       static _GLIBCXX_CONSTEXPR int
    1113             :       denorm_min() _GLIBCXX_USE_NOEXCEPT { return static_cast<int>(0); }
    1114             : 
    1115             :       static _GLIBCXX_USE_CONSTEXPR bool is_iec559 = false;
    1116             :       static _GLIBCXX_USE_CONSTEXPR bool is_bounded = true;
    1117             :       static _GLIBCXX_USE_CONSTEXPR bool is_modulo = false;
    1118             : 
    1119             :       static _GLIBCXX_USE_CONSTEXPR bool traps = __glibcxx_integral_traps;
    1120             :       static _GLIBCXX_USE_CONSTEXPR bool tinyness_before = false;
    1121             :       static _GLIBCXX_USE_CONSTEXPR float_round_style round_style
    1122             :        = round_toward_zero;
    1123             :     };
    1124             : 
    1125             :   /// numeric_limits<unsigned int> specialization.
    1126             :   template<>
    1127             :     struct numeric_limits<unsigned int>
    1128             :     {
    1129             :       static _GLIBCXX_USE_CONSTEXPR bool is_specialized = true;
    1130             : 
    1131             :       static _GLIBCXX_CONSTEXPR unsigned int
    1132             :       min() _GLIBCXX_USE_NOEXCEPT { return 0; }
    1133             : 
    1134             :       static _GLIBCXX_CONSTEXPR unsigned int
    1135           6 :       max() _GLIBCXX_USE_NOEXCEPT { return __INT_MAX__ * 2U + 1; }
    1136             : 
    1137             : #if __cplusplus >= 201103L
    1138             :       static constexpr unsigned int
    1139             :       lowest() noexcept { return min(); }
    1140             : #endif
    1141             : 
    1142             :       static _GLIBCXX_USE_CONSTEXPR int digits
    1143             :        = __glibcxx_digits (unsigned int);
    1144             :       static _GLIBCXX_USE_CONSTEXPR int digits10
    1145             :        = __glibcxx_digits10 (unsigned int);
    1146             : #if __cplusplus >= 201103L
    1147             :       static constexpr int max_digits10 = 0;
    1148             : #endif
    1149             :       static _GLIBCXX_USE_CONSTEXPR bool is_signed = false;
    1150             :       static _GLIBCXX_USE_CONSTEXPR bool is_integer = true;
    1151             :       static _GLIBCXX_USE_CONSTEXPR bool is_exact = true;
    1152             :       static _GLIBCXX_USE_CONSTEXPR int radix = 2;
    1153             : 
    1154             :       static _GLIBCXX_CONSTEXPR unsigned int
    1155             :       epsilon() _GLIBCXX_USE_NOEXCEPT { return 0; }
    1156             : 
    1157             :       static _GLIBCXX_CONSTEXPR unsigned int
    1158             :       round_error() _GLIBCXX_USE_NOEXCEPT { return 0; }
    1159             : 
    1160             :       static _GLIBCXX_USE_CONSTEXPR int min_exponent = 0;
    1161             :       static _GLIBCXX_USE_CONSTEXPR int min_exponent10 = 0;
    1162             :       static _GLIBCXX_USE_CONSTEXPR int max_exponent = 0;
    1163             :       static _GLIBCXX_USE_CONSTEXPR int max_exponent10 = 0;
    1164             : 
    1165             :       static _GLIBCXX_USE_CONSTEXPR bool has_infinity = false;
    1166             :       static _GLIBCXX_USE_CONSTEXPR bool has_quiet_NaN = false;
    1167             :       static _GLIBCXX_USE_CONSTEXPR bool has_signaling_NaN = false;
    1168             :       static _GLIBCXX_USE_CONSTEXPR float_denorm_style has_denorm
    1169             :        = denorm_absent;
    1170             :       static _GLIBCXX_USE_CONSTEXPR bool has_denorm_loss = false;
    1171             : 
    1172             :       static _GLIBCXX_CONSTEXPR unsigned int
    1173             :       infinity() _GLIBCXX_USE_NOEXCEPT { return static_cast<unsigned int>(0); }
    1174             : 
    1175             :       static _GLIBCXX_CONSTEXPR unsigned int
    1176             :       quiet_NaN() _GLIBCXX_USE_NOEXCEPT
    1177             :       { return static_cast<unsigned int>(0); }
    1178             : 
    1179             :       static _GLIBCXX_CONSTEXPR unsigned int
    1180             :       signaling_NaN() _GLIBCXX_USE_NOEXCEPT
    1181             :       { return static_cast<unsigned int>(0); }
    1182             : 
    1183             :       static _GLIBCXX_CONSTEXPR unsigned int
    1184             :       denorm_min() _GLIBCXX_USE_NOEXCEPT
    1185             :       { return static_cast<unsigned int>(0); }
    1186             : 
    1187             :       static _GLIBCXX_USE_CONSTEXPR bool is_iec559 = false;
    1188             :       static _GLIBCXX_USE_CONSTEXPR bool is_bounded = true;
    1189             :       static _GLIBCXX_USE_CONSTEXPR bool is_modulo = true;
    1190             : 
    1191             :       static _GLIBCXX_USE_CONSTEXPR bool traps = __glibcxx_integral_traps;
    1192             :       static _GLIBCXX_USE_CONSTEXPR bool tinyness_before = false;
    1193             :       static _GLIBCXX_USE_CONSTEXPR float_round_style round_style
    1194             :        = round_toward_zero;
    1195             :     };
    1196             : 
    1197             :   /// numeric_limits<long> specialization.
    1198             :   template<>
    1199             :     struct numeric_limits<long>
    1200             :     {
    1201             :       static _GLIBCXX_USE_CONSTEXPR bool is_specialized = true;
    1202             : 
    1203             :       static _GLIBCXX_CONSTEXPR long
    1204        4791 :       min() _GLIBCXX_USE_NOEXCEPT { return -__LONG_MAX__ - 1; }
    1205             : 
    1206             :       static _GLIBCXX_CONSTEXPR long
    1207       29511 :       max() _GLIBCXX_USE_NOEXCEPT { return __LONG_MAX__; }
    1208             : 
    1209             : #if __cplusplus >= 201103L
    1210             :       static constexpr long
    1211        4630 :       lowest() noexcept { return min(); }
    1212             : #endif
    1213             : 
    1214             :       static _GLIBCXX_USE_CONSTEXPR int digits = __glibcxx_digits (long);
    1215             :       static _GLIBCXX_USE_CONSTEXPR int digits10 = __glibcxx_digits10 (long);
    1216             : #if __cplusplus >= 201103L
    1217             :       static constexpr int max_digits10 = 0;
    1218             : #endif
    1219             :       static _GLIBCXX_USE_CONSTEXPR bool is_signed = true;
    1220             :       static _GLIBCXX_USE_CONSTEXPR bool is_integer = true;
    1221             :       static _GLIBCXX_USE_CONSTEXPR bool is_exact = true;
    1222             :       static _GLIBCXX_USE_CONSTEXPR int radix = 2;
    1223             : 
    1224             :       static _GLIBCXX_CONSTEXPR long
    1225             :       epsilon() _GLIBCXX_USE_NOEXCEPT { return 0; }
    1226             : 
    1227             :       static _GLIBCXX_CONSTEXPR long
    1228             :       round_error() _GLIBCXX_USE_NOEXCEPT { return 0; }
    1229             : 
    1230             :       static _GLIBCXX_USE_CONSTEXPR int min_exponent = 0;
    1231             :       static _GLIBCXX_USE_CONSTEXPR int min_exponent10 = 0;
    1232             :       static _GLIBCXX_USE_CONSTEXPR int max_exponent = 0;
    1233             :       static _GLIBCXX_USE_CONSTEXPR int max_exponent10 = 0;
    1234             : 
    1235             :       static _GLIBCXX_USE_CONSTEXPR bool has_infinity = false;
    1236             :       static _GLIBCXX_USE_CONSTEXPR bool has_quiet_NaN = false;
    1237             :       static _GLIBCXX_USE_CONSTEXPR bool has_signaling_NaN = false;
    1238             :       static _GLIBCXX_USE_CONSTEXPR float_denorm_style has_denorm
    1239             :        = denorm_absent;
    1240             :       static _GLIBCXX_USE_CONSTEXPR bool has_denorm_loss = false;
    1241             : 
    1242             :       static _GLIBCXX_CONSTEXPR long
    1243             :       infinity() _GLIBCXX_USE_NOEXCEPT { return static_cast<long>(0); }
    1244             : 
    1245             :       static _GLIBCXX_CONSTEXPR long
    1246             :       quiet_NaN() _GLIBCXX_USE_NOEXCEPT { return static_cast<long>(0); }
    1247             : 
    1248             :       static _GLIBCXX_CONSTEXPR long
    1249             :       signaling_NaN() _GLIBCXX_USE_NOEXCEPT { return static_cast<long>(0); }
    1250             : 
    1251             :       static _GLIBCXX_CONSTEXPR long
    1252             :       denorm_min() _GLIBCXX_USE_NOEXCEPT { return static_cast<long>(0); }
    1253             : 
    1254             :       static _GLIBCXX_USE_CONSTEXPR bool is_iec559 = false;
    1255             :       static _GLIBCXX_USE_CONSTEXPR bool is_bounded = true;
    1256             :       static _GLIBCXX_USE_CONSTEXPR bool is_modulo = false;
    1257             : 
    1258             :       static _GLIBCXX_USE_CONSTEXPR bool traps = __glibcxx_integral_traps;
    1259             :       static _GLIBCXX_USE_CONSTEXPR bool tinyness_before = false;
    1260             :       static _GLIBCXX_USE_CONSTEXPR float_round_style round_style
    1261             :        = round_toward_zero;
    1262             :     };
    1263             : 
    1264             :   /// numeric_limits<unsigned long> specialization.
    1265             :   template<>
    1266             :     struct numeric_limits<unsigned long>
    1267             :     {
    1268             :       static _GLIBCXX_USE_CONSTEXPR bool is_specialized = true;
    1269             : 
    1270             :       static _GLIBCXX_CONSTEXPR unsigned long
    1271             :       min() _GLIBCXX_USE_NOEXCEPT { return 0; }
    1272             : 
    1273             :       static _GLIBCXX_CONSTEXPR unsigned long
    1274      135819 :       max() _GLIBCXX_USE_NOEXCEPT { return __LONG_MAX__ * 2UL + 1; }
    1275             : 
    1276             : #if __cplusplus >= 201103L
    1277             :       static constexpr unsigned long
    1278             :       lowest() noexcept { return min(); }
    1279             : #endif
    1280             : 
    1281             :       static _GLIBCXX_USE_CONSTEXPR int digits
    1282             :        = __glibcxx_digits (unsigned long);
    1283             :       static _GLIBCXX_USE_CONSTEXPR int digits10
    1284             :        = __glibcxx_digits10 (unsigned long);
    1285             : #if __cplusplus >= 201103L
    1286             :       static constexpr int max_digits10 = 0;
    1287             : #endif
    1288             :       static _GLIBCXX_USE_CONSTEXPR bool is_signed = false;
    1289             :       static _GLIBCXX_USE_CONSTEXPR bool is_integer = true;
    1290             :       static _GLIBCXX_USE_CONSTEXPR bool is_exact = true;
    1291             :       static _GLIBCXX_USE_CONSTEXPR int radix = 2;
    1292             : 
    1293             :       static _GLIBCXX_CONSTEXPR unsigned long
    1294             :       epsilon() _GLIBCXX_USE_NOEXCEPT { return 0; }
    1295             : 
    1296             :       static _GLIBCXX_CONSTEXPR unsigned long
    1297             :       round_error() _GLIBCXX_USE_NOEXCEPT { return 0; }
    1298             : 
    1299             :       static _GLIBCXX_USE_CONSTEXPR int min_exponent = 0;
    1300             :       static _GLIBCXX_USE_CONSTEXPR int min_exponent10 = 0;
    1301             :       static _GLIBCXX_USE_CONSTEXPR int max_exponent = 0;
    1302             :       static _GLIBCXX_USE_CONSTEXPR int max_exponent10 = 0;
    1303             : 
    1304             :       static _GLIBCXX_USE_CONSTEXPR bool has_infinity = false;
    1305             :       static _GLIBCXX_USE_CONSTEXPR bool has_quiet_NaN = false;
    1306             :       static _GLIBCXX_USE_CONSTEXPR bool has_signaling_NaN = false;
    1307             :       static _GLIBCXX_USE_CONSTEXPR float_denorm_style has_denorm
    1308             :        = denorm_absent;
    1309             :       static _GLIBCXX_USE_CONSTEXPR bool has_denorm_loss = false;
    1310             : 
    1311             :       static _GLIBCXX_CONSTEXPR unsigned long
    1312             :       infinity() _GLIBCXX_USE_NOEXCEPT
    1313             :       { return static_cast<unsigned long>(0); }
    1314             : 
    1315             :       static _GLIBCXX_CONSTEXPR unsigned long
    1316             :       quiet_NaN() _GLIBCXX_USE_NOEXCEPT
    1317             :       { return static_cast<unsigned long>(0); }
    1318             : 
    1319             :       static _GLIBCXX_CONSTEXPR unsigned long
    1320             :       signaling_NaN() _GLIBCXX_USE_NOEXCEPT
    1321             :       { return static_cast<unsigned long>(0); }
    1322             : 
    1323             :       static _GLIBCXX_CONSTEXPR unsigned long
    1324             :       denorm_min() _GLIBCXX_USE_NOEXCEPT
    1325             :       { return static_cast<unsigned long>(0); }
    1326             : 
    1327             :       static _GLIBCXX_USE_CONSTEXPR bool is_iec559 = false;
    1328             :       static _GLIBCXX_USE_CONSTEXPR bool is_bounded = true;
    1329             :       static _GLIBCXX_USE_CONSTEXPR bool is_modulo = true;
    1330             : 
    1331             :       static _GLIBCXX_USE_CONSTEXPR bool traps = __glibcxx_integral_traps;
    1332             :       static _GLIBCXX_USE_CONSTEXPR bool tinyness_before = false;
    1333             :       static _GLIBCXX_USE_CONSTEXPR float_round_style round_style
    1334             :        = round_toward_zero;
    1335             :     };
    1336             : 
    1337             :   /// numeric_limits<long long> specialization.
    1338             :   template<>
    1339             :     struct numeric_limits<long long>
    1340             :     {
    1341             :       static _GLIBCXX_USE_CONSTEXPR bool is_specialized = true;
    1342             : 
    1343             :       static _GLIBCXX_CONSTEXPR long long
    1344             :       min() _GLIBCXX_USE_NOEXCEPT { return -__LONG_LONG_MAX__ - 1; }
    1345             : 
    1346             :       static _GLIBCXX_CONSTEXPR long long
    1347             :       max() _GLIBCXX_USE_NOEXCEPT { return __LONG_LONG_MAX__; }
    1348             : 
    1349             : #if __cplusplus >= 201103L
    1350             :       static constexpr long long
    1351             :       lowest() noexcept { return min(); }
    1352             : #endif
    1353             : 
    1354             :       static _GLIBCXX_USE_CONSTEXPR int digits
    1355             :        = __glibcxx_digits (long long);
    1356             :       static _GLIBCXX_USE_CONSTEXPR int digits10
    1357             :        = __glibcxx_digits10 (long long);
    1358             : #if __cplusplus >= 201103L
    1359             :       static constexpr int max_digits10 = 0;
    1360             : #endif
    1361             :       static _GLIBCXX_USE_CONSTEXPR bool is_signed = true;
    1362             :       static _GLIBCXX_USE_CONSTEXPR bool is_integer = true;
    1363             :       static _GLIBCXX_USE_CONSTEXPR bool is_exact = true;
    1364             :       static _GLIBCXX_USE_CONSTEXPR int radix = 2;
    1365             : 
    1366             :       static _GLIBCXX_CONSTEXPR long long
    1367             :       epsilon() _GLIBCXX_USE_NOEXCEPT { return 0; }
    1368             : 
    1369             :       static _GLIBCXX_CONSTEXPR long long
    1370             :       round_error() _GLIBCXX_USE_NOEXCEPT { return 0; }
    1371             : 
    1372             :       static _GLIBCXX_USE_CONSTEXPR int min_exponent = 0;
    1373             :       static _GLIBCXX_USE_CONSTEXPR int min_exponent10 = 0;
    1374             :       static _GLIBCXX_USE_CONSTEXPR int max_exponent = 0;
    1375             :       static _GLIBCXX_USE_CONSTEXPR int max_exponent10 = 0;
    1376             : 
    1377             :       static _GLIBCXX_USE_CONSTEXPR bool has_infinity = false;
    1378             :       static _GLIBCXX_USE_CONSTEXPR bool has_quiet_NaN = false;
    1379             :       static _GLIBCXX_USE_CONSTEXPR bool has_signaling_NaN = false;
    1380             :       static _GLIBCXX_USE_CONSTEXPR float_denorm_style has_denorm
    1381             :        = denorm_absent;
    1382             :       static _GLIBCXX_USE_CONSTEXPR bool has_denorm_loss = false;
    1383             : 
    1384             :       static _GLIBCXX_CONSTEXPR long long
    1385             :       infinity() _GLIBCXX_USE_NOEXCEPT { return static_cast<long long>(0); }
    1386             : 
    1387             :       static _GLIBCXX_CONSTEXPR long long
    1388             :       quiet_NaN() _GLIBCXX_USE_NOEXCEPT { return static_cast<long long>(0); }
    1389             : 
    1390             :       static _GLIBCXX_CONSTEXPR long long
    1391             :       signaling_NaN() _GLIBCXX_USE_NOEXCEPT
    1392             :       { return static_cast<long long>(0); }
    1393             : 
    1394             :       static _GLIBCXX_CONSTEXPR long long
    1395             :       denorm_min() _GLIBCXX_USE_NOEXCEPT { return static_cast<long long>(0); }
    1396             : 
    1397             :       static _GLIBCXX_USE_CONSTEXPR bool is_iec559 = false;
    1398             :       static _GLIBCXX_USE_CONSTEXPR bool is_bounded = true;
    1399             :       static _GLIBCXX_USE_CONSTEXPR bool is_modulo = false;
    1400             : 
    1401             :       static _GLIBCXX_USE_CONSTEXPR bool traps = __glibcxx_integral_traps;
    1402             :       static _GLIBCXX_USE_CONSTEXPR bool tinyness_before = false;
    1403             :       static _GLIBCXX_USE_CONSTEXPR float_round_style round_style
    1404             :        = round_toward_zero;
    1405             :     };
    1406             : 
    1407             :   /// numeric_limits<unsigned long long> specialization.
    1408             :   template<>
    1409             :     struct numeric_limits<unsigned long long>
    1410             :     {
    1411             :       static _GLIBCXX_USE_CONSTEXPR bool is_specialized = true;
    1412             : 
    1413             :       static _GLIBCXX_CONSTEXPR unsigned long long
    1414             :       min() _GLIBCXX_USE_NOEXCEPT { return 0; }
    1415             : 
    1416             :       static _GLIBCXX_CONSTEXPR unsigned long long
    1417             :       max() _GLIBCXX_USE_NOEXCEPT { return __LONG_LONG_MAX__ * 2ULL + 1; }
    1418             : 
    1419             : #if __cplusplus >= 201103L
    1420             :       static constexpr unsigned long long
    1421             :       lowest() noexcept { return min(); }
    1422             : #endif
    1423             : 
    1424             :       static _GLIBCXX_USE_CONSTEXPR int digits
    1425             :        = __glibcxx_digits (unsigned long long);
    1426             :       static _GLIBCXX_USE_CONSTEXPR int digits10
    1427             :        = __glibcxx_digits10 (unsigned long long);
    1428             : #if __cplusplus >= 201103L
    1429             :       static constexpr int max_digits10 = 0;
    1430             : #endif
    1431             :       static _GLIBCXX_USE_CONSTEXPR bool is_signed = false;
    1432             :       static _GLIBCXX_USE_CONSTEXPR bool is_integer = true;
    1433             :       static _GLIBCXX_USE_CONSTEXPR bool is_exact = true;
    1434             :       static _GLIBCXX_USE_CONSTEXPR int radix = 2;
    1435             : 
    1436             :       static _GLIBCXX_CONSTEXPR unsigned long long
    1437             :       epsilon() _GLIBCXX_USE_NOEXCEPT { return 0; }
    1438             : 
    1439             :       static _GLIBCXX_CONSTEXPR unsigned long long
    1440             :       round_error() _GLIBCXX_USE_NOEXCEPT { return 0; }
    1441             : 
    1442             :       static _GLIBCXX_USE_CONSTEXPR int min_exponent = 0;
    1443             :       static _GLIBCXX_USE_CONSTEXPR int min_exponent10 = 0;
    1444             :       static _GLIBCXX_USE_CONSTEXPR int max_exponent = 0;
    1445             :       static _GLIBCXX_USE_CONSTEXPR int max_exponent10 = 0;
    1446             : 
    1447             :       static _GLIBCXX_USE_CONSTEXPR bool has_infinity = false;
    1448             :       static _GLIBCXX_USE_CONSTEXPR bool has_quiet_NaN = false;
    1449             :       static _GLIBCXX_USE_CONSTEXPR bool has_signaling_NaN = false;
    1450             :       static _GLIBCXX_USE_CONSTEXPR float_denorm_style has_denorm
    1451             :        = denorm_absent;
    1452             :       static _GLIBCXX_USE_CONSTEXPR bool has_denorm_loss = false;
    1453             : 
    1454             :       static _GLIBCXX_CONSTEXPR unsigned long long
    1455             :       infinity() _GLIBCXX_USE_NOEXCEPT
    1456             :       { return static_cast<unsigned long long>(0); }
    1457             : 
    1458             :       static _GLIBCXX_CONSTEXPR unsigned long long
    1459             :       quiet_NaN() _GLIBCXX_USE_NOEXCEPT
    1460             :       { return static_cast<unsigned long long>(0); }
    1461             : 
    1462             :       static _GLIBCXX_CONSTEXPR unsigned long long
    1463             :       signaling_NaN() _GLIBCXX_USE_NOEXCEPT
    1464             :       { return static_cast<unsigned long long>(0); }
    1465             : 
    1466             :       static _GLIBCXX_CONSTEXPR unsigned long long
    1467             :       denorm_min() _GLIBCXX_USE_NOEXCEPT
    1468             :       { return static_cast<unsigned long long>(0); }
    1469             : 
    1470             :       static _GLIBCXX_USE_CONSTEXPR bool is_iec559 = false;
    1471             :       static _GLIBCXX_USE_CONSTEXPR bool is_bounded = true;
    1472             :       static _GLIBCXX_USE_CONSTEXPR bool is_modulo = true;
    1473             : 
    1474             :       static _GLIBCXX_USE_CONSTEXPR bool traps = __glibcxx_integral_traps;
    1475             :       static _GLIBCXX_USE_CONSTEXPR bool tinyness_before = false;
    1476             :       static _GLIBCXX_USE_CONSTEXPR float_round_style round_style
    1477             :        = round_toward_zero;
    1478             :     };
    1479             : 
    1480             : #define __INT_N(TYPE, BITSIZE, EXT, UEXT)                               \
    1481             :   template<>                                                              \
    1482             :     struct numeric_limits<TYPE>                                           \
    1483             :     {                                                                   \
    1484             :       static _GLIBCXX_USE_CONSTEXPR bool is_specialized = true;         \
    1485             :                                                                         \
    1486             :       static _GLIBCXX_CONSTEXPR TYPE                                    \
    1487             :       min() _GLIBCXX_USE_NOEXCEPT { return __glibcxx_min_b (TYPE, BITSIZE); } \
    1488             :                                                                         \
    1489             :       static _GLIBCXX_CONSTEXPR TYPE                                    \
    1490             :       max() _GLIBCXX_USE_NOEXCEPT { return __glibcxx_max_b (TYPE, BITSIZE); } \
    1491             :                                                                         \
    1492             :       static _GLIBCXX_USE_CONSTEXPR int digits                          \
    1493             :         = BITSIZE - 1;                                                  \
    1494             :       static _GLIBCXX_USE_CONSTEXPR int digits10                        \
    1495             :         = (BITSIZE - 1) * 643L / 2136;                                  \
    1496             :                                                                         \
    1497             :       static _GLIBCXX_USE_CONSTEXPR bool is_signed = true;              \
    1498             :       static _GLIBCXX_USE_CONSTEXPR bool is_integer = true;             \
    1499             :       static _GLIBCXX_USE_CONSTEXPR bool is_exact = true;               \
    1500             :       static _GLIBCXX_USE_CONSTEXPR int radix = 2;                      \
    1501             :                                                                         \
    1502             :       static _GLIBCXX_CONSTEXPR TYPE                                    \
    1503             :       epsilon() _GLIBCXX_USE_NOEXCEPT { return 0; }                     \
    1504             :                                                                         \
    1505             :       static _GLIBCXX_CONSTEXPR TYPE                                    \
    1506             :       round_error() _GLIBCXX_USE_NOEXCEPT { return 0; }                 \
    1507             :                                                                         \
    1508             :       EXT                                                               \
    1509             :                                                                         \
    1510             :       static _GLIBCXX_USE_CONSTEXPR int min_exponent = 0;               \
    1511             :       static _GLIBCXX_USE_CONSTEXPR int min_exponent10 = 0;             \
    1512             :       static _GLIBCXX_USE_CONSTEXPR int max_exponent = 0;               \
    1513             :       static _GLIBCXX_USE_CONSTEXPR int max_exponent10 = 0;             \
    1514             :                                                                         \
    1515             :       static _GLIBCXX_USE_CONSTEXPR bool has_infinity = false;          \
    1516             :       static _GLIBCXX_USE_CONSTEXPR bool has_quiet_NaN = false;         \
    1517             :       static _GLIBCXX_USE_CONSTEXPR bool has_signaling_NaN = false;     \
    1518             :       static _GLIBCXX_USE_CONSTEXPR float_denorm_style has_denorm       \
    1519             :         = denorm_absent;                                                \
    1520             :       static _GLIBCXX_USE_CONSTEXPR bool has_denorm_loss = false;       \
    1521             :                                                                         \
    1522             :       static _GLIBCXX_CONSTEXPR TYPE                                    \
    1523             :       infinity() _GLIBCXX_USE_NOEXCEPT                                  \
    1524             :       { return static_cast<TYPE>(0); }                                    \
    1525             :                                                                         \
    1526             :       static _GLIBCXX_CONSTEXPR TYPE                                    \
    1527             :       quiet_NaN() _GLIBCXX_USE_NOEXCEPT                                 \
    1528             :       { return static_cast<TYPE>(0); }                                    \
    1529             :                                                                         \
    1530             :       static _GLIBCXX_CONSTEXPR TYPE                                    \
    1531             :       signaling_NaN() _GLIBCXX_USE_NOEXCEPT                             \
    1532             :       { return static_cast<TYPE>(0); }                                    \
    1533             :                                                                         \
    1534             :       static _GLIBCXX_CONSTEXPR TYPE                                    \
    1535             :       denorm_min() _GLIBCXX_USE_NOEXCEPT                                \
    1536             :       { return static_cast<TYPE>(0); }                                    \
    1537             :                                                                         \
    1538             :       static _GLIBCXX_USE_CONSTEXPR bool is_iec559 = false;             \
    1539             :       static _GLIBCXX_USE_CONSTEXPR bool is_bounded = true;             \
    1540             :       static _GLIBCXX_USE_CONSTEXPR bool is_modulo = false;             \
    1541             :                                                                         \
    1542             :       static _GLIBCXX_USE_CONSTEXPR bool traps                          \
    1543             :         = __glibcxx_integral_traps;                                     \
    1544             :       static _GLIBCXX_USE_CONSTEXPR bool tinyness_before = false;       \
    1545             :       static _GLIBCXX_USE_CONSTEXPR float_round_style round_style       \
    1546             :         = round_toward_zero;                                            \
    1547             :     };                                                                  \
    1548             :                                                                         \
    1549             :   template<>                                                              \
    1550             :     struct numeric_limits<unsigned TYPE>                          \
    1551             :     {                                                                   \
    1552             :       static _GLIBCXX_USE_CONSTEXPR bool is_specialized = true;         \
    1553             :                                                                         \
    1554             :       static _GLIBCXX_CONSTEXPR unsigned TYPE                           \
    1555             :       min() _GLIBCXX_USE_NOEXCEPT { return 0; }                         \
    1556             :                                                                         \
    1557             :       static _GLIBCXX_CONSTEXPR unsigned TYPE                           \
    1558             :       max() _GLIBCXX_USE_NOEXCEPT                                       \
    1559             :       { return  __glibcxx_max_b (unsigned TYPE, BITSIZE); }             \
    1560             :                                                                         \
    1561             :       UEXT                                                              \
    1562             :                                                                         \
    1563             :       static _GLIBCXX_USE_CONSTEXPR int digits                          \
    1564             :         = BITSIZE;                                                      \
    1565             :       static _GLIBCXX_USE_CONSTEXPR int digits10                        \
    1566             :         = BITSIZE * 643L / 2136;                                        \
    1567             :       static _GLIBCXX_USE_CONSTEXPR bool is_signed = false;             \
    1568             :       static _GLIBCXX_USE_CONSTEXPR bool is_integer = true;             \
    1569             :       static _GLIBCXX_USE_CONSTEXPR bool is_exact = true;               \
    1570             :       static _GLIBCXX_USE_CONSTEXPR int radix = 2;                      \
    1571             :                                                                         \
    1572             :       static _GLIBCXX_CONSTEXPR unsigned TYPE                           \
    1573             :       epsilon() _GLIBCXX_USE_NOEXCEPT { return 0; }                     \
    1574             :                                                                         \
    1575             :       static _GLIBCXX_CONSTEXPR unsigned TYPE                           \
    1576             :       round_error() _GLIBCXX_USE_NOEXCEPT { return 0; }                 \
    1577             :                                                                         \
    1578             :       static _GLIBCXX_USE_CONSTEXPR int min_exponent = 0;               \
    1579             :       static _GLIBCXX_USE_CONSTEXPR int min_exponent10 = 0;             \
    1580             :       static _GLIBCXX_USE_CONSTEXPR int max_exponent = 0;               \
    1581             :       static _GLIBCXX_USE_CONSTEXPR int max_exponent10 = 0;             \
    1582             :                                                                         \
    1583             :       static _GLIBCXX_USE_CONSTEXPR bool has_infinity = false;          \
    1584             :       static _GLIBCXX_USE_CONSTEXPR bool has_quiet_NaN = false;         \
    1585             :       static _GLIBCXX_USE_CONSTEXPR bool has_signaling_NaN = false;     \
    1586             :       static _GLIBCXX_USE_CONSTEXPR float_denorm_style has_denorm       \
    1587             :        = denorm_absent;                                                 \
    1588             :       static _GLIBCXX_USE_CONSTEXPR bool has_denorm_loss = false;       \
    1589             :                                                                         \
    1590             :       static _GLIBCXX_CONSTEXPR unsigned TYPE                           \
    1591             :       infinity() _GLIBCXX_USE_NOEXCEPT                                  \
    1592             :       { return static_cast<unsigned TYPE>(0); }                           \
    1593             :                                                                         \
    1594             :       static _GLIBCXX_CONSTEXPR unsigned TYPE                           \
    1595             :       quiet_NaN() _GLIBCXX_USE_NOEXCEPT                                 \
    1596             :       { return static_cast<unsigned TYPE>(0); }                           \
    1597             :                                                                         \
    1598             :       static _GLIBCXX_CONSTEXPR unsigned TYPE                           \
    1599             :       signaling_NaN() _GLIBCXX_USE_NOEXCEPT                             \
    1600             :       { return static_cast<unsigned TYPE>(0); }                           \
    1601             :                                                                         \
    1602             :       static _GLIBCXX_CONSTEXPR unsigned TYPE                           \
    1603             :       denorm_min() _GLIBCXX_USE_NOEXCEPT                                \
    1604             :       { return static_cast<unsigned TYPE>(0); }                           \
    1605             :                                                                         \
    1606             :       static _GLIBCXX_USE_CONSTEXPR bool is_iec559 = false;             \
    1607             :       static _GLIBCXX_USE_CONSTEXPR bool is_bounded = true;             \
    1608             :       static _GLIBCXX_USE_CONSTEXPR bool is_modulo = true;              \
    1609             :                                                                         \
    1610             :       static _GLIBCXX_USE_CONSTEXPR bool traps = __glibcxx_integral_traps; \
    1611             :       static _GLIBCXX_USE_CONSTEXPR bool tinyness_before = false;       \
    1612             :       static _GLIBCXX_USE_CONSTEXPR float_round_style round_style       \
    1613             :         = round_toward_zero;                                            \
    1614             :     };
    1615             : 
    1616             : #if __cplusplus >= 201103L
    1617             : 
    1618             : #define __INT_N_201103(TYPE)                                            \
    1619             :       static constexpr TYPE                                             \
    1620             :       lowest() noexcept { return min(); }                               \
    1621             :       static constexpr int max_digits10 = 0;
    1622             : 
    1623             : #define __INT_N_U201103(TYPE)                                           \
    1624             :       static constexpr unsigned TYPE                                    \
    1625             :       lowest() noexcept { return min(); }                               \
    1626             :       static constexpr int max_digits10 = 0;
    1627             : 
    1628             : #else
    1629             : #define __INT_N_201103(TYPE)
    1630             : #define __INT_N_U201103(TYPE)
    1631             : #endif
    1632             : 
    1633             : #if !defined(__STRICT_ANSI__)
    1634             : #ifdef __GLIBCXX_TYPE_INT_N_0
    1635             :   __INT_N(__GLIBCXX_TYPE_INT_N_0, __GLIBCXX_BITSIZE_INT_N_0,
    1636             :           __INT_N_201103 (__GLIBCXX_TYPE_INT_N_0),
    1637             :           __INT_N_U201103 (__GLIBCXX_TYPE_INT_N_0))
    1638             : #endif
    1639             : #ifdef __GLIBCXX_TYPE_INT_N_1
    1640             :   __INT_N (__GLIBCXX_TYPE_INT_N_1, __GLIBCXX_BITSIZE_INT_N_1,
    1641             :           __INT_N_201103 (__GLIBCXX_TYPE_INT_N_1),
    1642             :           __INT_N_U201103 (__GLIBCXX_TYPE_INT_N_1))
    1643             : #endif
    1644             : #ifdef __GLIBCXX_TYPE_INT_N_2
    1645             :   __INT_N (__GLIBCXX_TYPE_INT_N_2, __GLIBCXX_BITSIZE_INT_N_2,
    1646             :           __INT_N_201103 (__GLIBCXX_TYPE_INT_N_2),
    1647             :           __INT_N_U201103 (__GLIBCXX_TYPE_INT_N_2))
    1648             : #endif
    1649             : #ifdef __GLIBCXX_TYPE_INT_N_3
    1650             :   __INT_N (__GLIBCXX_TYPE_INT_N_3, __GLIBCXX_BITSIZE_INT_N_3,
    1651             :           __INT_N_201103 (__GLIBCXX_TYPE_INT_N_3),
    1652             :           __INT_N_U201103 (__GLIBCXX_TYPE_INT_N_3))
    1653             : #endif
    1654             : 
    1655             : #elif defined __STRICT_ANSI__ && defined __SIZEOF_INT128__
    1656             :   __INT_N(__int128, 128,
    1657             :           __INT_N_201103 (__int128),
    1658             :           __INT_N_U201103 (__int128))
    1659             : #endif
    1660             : 
    1661             : #undef __INT_N
    1662             : #undef __INT_N_201103
    1663             : #undef __INT_N_U201103
    1664             : 
    1665             : 
    1666             :   /// numeric_limits<float> specialization.
    1667             :   template<>
    1668             :     struct numeric_limits<float>
    1669             :     {
    1670             :       static _GLIBCXX_USE_CONSTEXPR bool is_specialized = true;
    1671             : 
    1672             :       static _GLIBCXX_CONSTEXPR float
    1673             :       min() _GLIBCXX_USE_NOEXCEPT { return __FLT_MIN__; }
    1674             : 
    1675             :       static _GLIBCXX_CONSTEXPR float
    1676             :       max() _GLIBCXX_USE_NOEXCEPT { return __FLT_MAX__; }
    1677             : 
    1678             : #if __cplusplus >= 201103L
    1679             :       static constexpr float
    1680             :       lowest() noexcept { return -__FLT_MAX__; }
    1681             : #endif
    1682             : 
    1683             :       static _GLIBCXX_USE_CONSTEXPR int digits = __FLT_MANT_DIG__;
    1684             :       static _GLIBCXX_USE_CONSTEXPR int digits10 = __FLT_DIG__;
    1685             : #if __cplusplus >= 201103L
    1686             :       static constexpr int max_digits10
    1687             :          = __glibcxx_max_digits10 (__FLT_MANT_DIG__);
    1688             : #endif
    1689             :       static _GLIBCXX_USE_CONSTEXPR bool is_signed = true;
    1690             :       static _GLIBCXX_USE_CONSTEXPR bool is_integer = false;
    1691             :       static _GLIBCXX_USE_CONSTEXPR bool is_exact = false;
    1692             :       static _GLIBCXX_USE_CONSTEXPR int radix = __FLT_RADIX__;
    1693             : 
    1694             :       static _GLIBCXX_CONSTEXPR float
    1695             :       epsilon() _GLIBCXX_USE_NOEXCEPT { return __FLT_EPSILON__; }
    1696             : 
    1697             :       static _GLIBCXX_CONSTEXPR float
    1698             :       round_error() _GLIBCXX_USE_NOEXCEPT { return 0.5F; }
    1699             : 
    1700             :       static _GLIBCXX_USE_CONSTEXPR int min_exponent = __FLT_MIN_EXP__;
    1701             :       static _GLIBCXX_USE_CONSTEXPR int min_exponent10 = __FLT_MIN_10_EXP__;
    1702             :       static _GLIBCXX_USE_CONSTEXPR int max_exponent = __FLT_MAX_EXP__;
    1703             :       static _GLIBCXX_USE_CONSTEXPR int max_exponent10 = __FLT_MAX_10_EXP__;
    1704             : 
    1705             :       static _GLIBCXX_USE_CONSTEXPR bool has_infinity = __FLT_HAS_INFINITY__;
    1706             :       static _GLIBCXX_USE_CONSTEXPR bool has_quiet_NaN = __FLT_HAS_QUIET_NAN__;
    1707             :       static _GLIBCXX_USE_CONSTEXPR bool has_signaling_NaN = has_quiet_NaN;
    1708             :       static _GLIBCXX_USE_CONSTEXPR float_denorm_style has_denorm
    1709             :         = bool(__FLT_HAS_DENORM__) ? denorm_present : denorm_absent;
    1710             :       static _GLIBCXX_USE_CONSTEXPR bool has_denorm_loss
    1711             :        = __glibcxx_float_has_denorm_loss;
    1712             : 
    1713             :       static _GLIBCXX_CONSTEXPR float
    1714             :       infinity() _GLIBCXX_USE_NOEXCEPT { return __builtin_huge_valf(); }
    1715             : 
    1716             :       static _GLIBCXX_CONSTEXPR float
    1717             :       quiet_NaN() _GLIBCXX_USE_NOEXCEPT { return __builtin_nanf(""); }
    1718             : 
    1719             :       static _GLIBCXX_CONSTEXPR float
    1720             :       signaling_NaN() _GLIBCXX_USE_NOEXCEPT { return __builtin_nansf(""); }
    1721             : 
    1722             :       static _GLIBCXX_CONSTEXPR float
    1723             :       denorm_min() _GLIBCXX_USE_NOEXCEPT { return __FLT_DENORM_MIN__; }
    1724             : 
    1725             :       static _GLIBCXX_USE_CONSTEXPR bool is_iec559
    1726             :         = has_infinity && has_quiet_NaN && has_denorm == denorm_present;
    1727             :       static _GLIBCXX_USE_CONSTEXPR bool is_bounded = true;
    1728             :       static _GLIBCXX_USE_CONSTEXPR bool is_modulo = false;
    1729             : 
    1730             :       static _GLIBCXX_USE_CONSTEXPR bool traps = __glibcxx_float_traps;
    1731             :       static _GLIBCXX_USE_CONSTEXPR bool tinyness_before
    1732             :        = __glibcxx_float_tinyness_before;
    1733             :       static _GLIBCXX_USE_CONSTEXPR float_round_style round_style
    1734             :        = round_to_nearest;
    1735             :     };
    1736             : 
    1737             : #undef __glibcxx_float_has_denorm_loss
    1738             : #undef __glibcxx_float_traps
    1739             : #undef __glibcxx_float_tinyness_before
    1740             : 
    1741             :   /// numeric_limits<double> specialization.
    1742             :   template<>
    1743             :     struct numeric_limits<double>
    1744             :     {
    1745             :       static _GLIBCXX_USE_CONSTEXPR bool is_specialized = true;
    1746             : 
    1747             :       static _GLIBCXX_CONSTEXPR double
    1748             :       min() _GLIBCXX_USE_NOEXCEPT { return __DBL_MIN__; }
    1749             : 
    1750             :       static _GLIBCXX_CONSTEXPR double
    1751             :       max() _GLIBCXX_USE_NOEXCEPT { return __DBL_MAX__; }
    1752             : 
    1753             : #if __cplusplus >= 201103L
    1754             :       static constexpr double
    1755             :       lowest() noexcept { return -__DBL_MAX__; }
    1756             : #endif
    1757             : 
    1758             :       static _GLIBCXX_USE_CONSTEXPR int digits = __DBL_MANT_DIG__;
    1759             :       static _GLIBCXX_USE_CONSTEXPR int digits10 = __DBL_DIG__;
    1760             : #if __cplusplus >= 201103L
    1761             :       static constexpr int max_digits10
    1762             :          = __glibcxx_max_digits10 (__DBL_MANT_DIG__);
    1763             : #endif
    1764             :       static _GLIBCXX_USE_CONSTEXPR bool is_signed = true;
    1765             :       static _GLIBCXX_USE_CONSTEXPR bool is_integer = false;
    1766             :       static _GLIBCXX_USE_CONSTEXPR bool is_exact = false;
    1767             :       static _GLIBCXX_USE_CONSTEXPR int radix = __FLT_RADIX__;
    1768             : 
    1769             :       static _GLIBCXX_CONSTEXPR double
    1770             :       epsilon() _GLIBCXX_USE_NOEXCEPT { return __DBL_EPSILON__; }
    1771             : 
    1772             :       static _GLIBCXX_CONSTEXPR double
    1773             :       round_error() _GLIBCXX_USE_NOEXCEPT { return 0.5; }
    1774             : 
    1775             :       static _GLIBCXX_USE_CONSTEXPR int min_exponent = __DBL_MIN_EXP__;
    1776             :       static _GLIBCXX_USE_CONSTEXPR int min_exponent10 = __DBL_MIN_10_EXP__;
    1777             :       static _GLIBCXX_USE_CONSTEXPR int max_exponent = __DBL_MAX_EXP__;
    1778             :       static _GLIBCXX_USE_CONSTEXPR int max_exponent10 = __DBL_MAX_10_EXP__;
    1779             : 
    1780             :       static _GLIBCXX_USE_CONSTEXPR bool has_infinity = __DBL_HAS_INFINITY__;
    1781             :       static _GLIBCXX_USE_CONSTEXPR bool has_quiet_NaN = __DBL_HAS_QUIET_NAN__;
    1782             :       static _GLIBCXX_USE_CONSTEXPR bool has_signaling_NaN = has_quiet_NaN;
    1783             :       static _GLIBCXX_USE_CONSTEXPR float_denorm_style has_denorm
    1784             :         = bool(__DBL_HAS_DENORM__) ? denorm_present : denorm_absent;
    1785             :       static _GLIBCXX_USE_CONSTEXPR bool has_denorm_loss
    1786             :         = __glibcxx_double_has_denorm_loss;
    1787             : 
    1788             :       static _GLIBCXX_CONSTEXPR double
    1789           0 :       infinity() _GLIBCXX_USE_NOEXCEPT { return __builtin_huge_val(); }
    1790             : 
    1791             :       static _GLIBCXX_CONSTEXPR double
    1792           0 :       quiet_NaN() _GLIBCXX_USE_NOEXCEPT { return __builtin_nan(""); }
    1793             : 
    1794             :       static _GLIBCXX_CONSTEXPR double
    1795             :       signaling_NaN() _GLIBCXX_USE_NOEXCEPT { return __builtin_nans(""); }
    1796             : 
    1797             :       static _GLIBCXX_CONSTEXPR double
    1798             :       denorm_min() _GLIBCXX_USE_NOEXCEPT { return __DBL_DENORM_MIN__; }
    1799             : 
    1800             :       static _GLIBCXX_USE_CONSTEXPR bool is_iec559
    1801             :         = has_infinity && has_quiet_NaN && has_denorm == denorm_present;
    1802             :       static _GLIBCXX_USE_CONSTEXPR bool is_bounded = true;
    1803             :       static _GLIBCXX_USE_CONSTEXPR bool is_modulo = false;
    1804             : 
    1805             :       static _GLIBCXX_USE_CONSTEXPR bool traps = __glibcxx_double_traps;
    1806             :       static _GLIBCXX_USE_CONSTEXPR bool tinyness_before
    1807             :        = __glibcxx_double_tinyness_before;
    1808             :       static _GLIBCXX_USE_CONSTEXPR float_round_style round_style
    1809             :        = round_to_nearest;
    1810             :     };
    1811             : 
    1812             : #undef __glibcxx_double_has_denorm_loss
    1813             : #undef __glibcxx_double_traps
    1814             : #undef __glibcxx_double_tinyness_before
    1815             : 
    1816             :   /// numeric_limits<long double> specialization.
    1817             :   template<>
    1818             :     struct numeric_limits<long double>
    1819             :     {
    1820             :       static _GLIBCXX_USE_CONSTEXPR bool is_specialized = true;
    1821             : 
    1822             :       static _GLIBCXX_CONSTEXPR long double
    1823             :       min() _GLIBCXX_USE_NOEXCEPT { return __LDBL_MIN__; }
    1824             : 
    1825             :       static _GLIBCXX_CONSTEXPR long double
    1826             :       max() _GLIBCXX_USE_NOEXCEPT { return __LDBL_MAX__; }
    1827             : 
    1828             : #if __cplusplus >= 201103L
    1829             :       static constexpr long double
    1830             :       lowest() noexcept { return -__LDBL_MAX__; }
    1831             : #endif
    1832             : 
    1833             :       static _GLIBCXX_USE_CONSTEXPR int digits = __LDBL_MANT_DIG__;
    1834             :       static _GLIBCXX_USE_CONSTEXPR int digits10 = __LDBL_DIG__;
    1835             : #if __cplusplus >= 201103L
    1836             :       static _GLIBCXX_USE_CONSTEXPR int max_digits10
    1837             :          = __glibcxx_max_digits10 (__LDBL_MANT_DIG__);
    1838             : #endif
    1839             :       static _GLIBCXX_USE_CONSTEXPR bool is_signed = true;
    1840             :       static _GLIBCXX_USE_CONSTEXPR bool is_integer = false;
    1841             :       static _GLIBCXX_USE_CONSTEXPR bool is_exact = false;
    1842             :       static _GLIBCXX_USE_CONSTEXPR int radix = __FLT_RADIX__;
    1843             : 
    1844             :       static _GLIBCXX_CONSTEXPR long double
    1845             :       epsilon() _GLIBCXX_USE_NOEXCEPT { return __LDBL_EPSILON__; }
    1846             : 
    1847             :       static _GLIBCXX_CONSTEXPR long double
    1848             :       round_error() _GLIBCXX_USE_NOEXCEPT { return 0.5L; }
    1849             : 
    1850             :       static _GLIBCXX_USE_CONSTEXPR int min_exponent = __LDBL_MIN_EXP__;
    1851             :       static _GLIBCXX_USE_CONSTEXPR int min_exponent10 = __LDBL_MIN_10_EXP__;
    1852             :       static _GLIBCXX_USE_CONSTEXPR int max_exponent = __LDBL_MAX_EXP__;
    1853             :       static _GLIBCXX_USE_CONSTEXPR int max_exponent10 = __LDBL_MAX_10_EXP__;
    1854             : 
    1855             :       static _GLIBCXX_USE_CONSTEXPR bool has_infinity = __LDBL_HAS_INFINITY__;
    1856             :       static _GLIBCXX_USE_CONSTEXPR bool has_quiet_NaN = __LDBL_HAS_QUIET_NAN__;
    1857             :       static _GLIBCXX_USE_CONSTEXPR bool has_signaling_NaN = has_quiet_NaN;
    1858             :       static _GLIBCXX_USE_CONSTEXPR float_denorm_style has_denorm
    1859             :         = bool(__LDBL_HAS_DENORM__) ? denorm_present : denorm_absent;
    1860             :       static _GLIBCXX_USE_CONSTEXPR bool has_denorm_loss
    1861             :         = __glibcxx_long_double_has_denorm_loss;
    1862             : 
    1863             :       static _GLIBCXX_CONSTEXPR long double
    1864             :       infinity() _GLIBCXX_USE_NOEXCEPT { return __builtin_huge_vall(); }
    1865             : 
    1866             :       static _GLIBCXX_CONSTEXPR long double
    1867             :       quiet_NaN() _GLIBCXX_USE_NOEXCEPT { return __builtin_nanl(""); }
    1868             : 
    1869             :       static _GLIBCXX_CONSTEXPR long double
    1870             :       signaling_NaN() _GLIBCXX_USE_NOEXCEPT { return __builtin_nansl(""); }
    1871             : 
    1872             :       static _GLIBCXX_CONSTEXPR long double
    1873             :       denorm_min() _GLIBCXX_USE_NOEXCEPT { return __LDBL_DENORM_MIN__; }
    1874             : 
    1875             :       static _GLIBCXX_USE_CONSTEXPR bool is_iec559
    1876             :         = has_infinity && has_quiet_NaN && has_denorm == denorm_present;
    1877             :       static _GLIBCXX_USE_CONSTEXPR bool is_bounded = true;
    1878             :       static _GLIBCXX_USE_CONSTEXPR bool is_modulo = false;
    1879             : 
    1880             :       static _GLIBCXX_USE_CONSTEXPR bool traps = __glibcxx_long_double_traps;
    1881             :       static _GLIBCXX_USE_CONSTEXPR bool tinyness_before =
    1882             :                                          __glibcxx_long_double_tinyness_before;
    1883             :       static _GLIBCXX_USE_CONSTEXPR float_round_style round_style =
    1884             :                                                       round_to_nearest;
    1885             :     };
    1886             : 
    1887             : #undef __glibcxx_long_double_has_denorm_loss
    1888             : #undef __glibcxx_long_double_traps
    1889             : #undef __glibcxx_long_double_tinyness_before
    1890             : 
    1891             : _GLIBCXX_END_NAMESPACE_VERSION
    1892             : } // namespace
    1893             : 
    1894             : #undef __glibcxx_signed
    1895             : #undef __glibcxx_min
    1896             : #undef __glibcxx_max
    1897             : #undef __glibcxx_digits
    1898             : #undef __glibcxx_digits10
    1899             : #undef __glibcxx_max_digits10
    1900             : 
    1901             : #endif // _GLIBCXX_NUMERIC_LIMITS

Generated by: LCOV version 1.14