1 // The template and inlines for the numeric_limits classes. -*- C++ -*-
 
    3 // Copyright (C) 1999-2014 Free Software Foundation, Inc.
 
    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)
 
   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.
 
   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.
 
   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/>.
 
   25 /** @file include/limits
 
   26  *  This is a Standard C++ Library header.
 
   29 // Note: this is not a conforming implementation.
 
   30 // Written by Gabriel Dos Reis <gdr@codesourcery.com>
 
   37 #ifndef _GLIBCXX_NUMERIC_LIMITS
 
   38 #define _GLIBCXX_NUMERIC_LIMITS 1
 
   40 #pragma GCC system_header
 
   42 #include <bits/c++config.h>
 
   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:
 
   50 //         char, signed char, unsigned char, wchar_t            (4)
 
   51 //         short, unsigned short               (2)
 
   53 //         long, unsigned long                 (2)
 
   60 // GNU C++ understands (where supported by the host C-library)
 
   62 //         long long, unsigned long long           (2)
 
   64 // which brings us to 16 fundamental arithmetic data types in GNU C++.
 
   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.
 
   73 // These values can be overridden in the target configuration file.
 
   74 // The default values are appropriate for many 32-bit targets.
 
   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
 
   86 // Default values.  Should be overridden in configuration files if necessary.
 
   88 #ifndef __glibcxx_float_has_denorm_loss
 
   89 #  define __glibcxx_float_has_denorm_loss false
 
   91 #ifndef __glibcxx_float_traps
 
   92 #  define __glibcxx_float_traps false
 
   94 #ifndef __glibcxx_float_tinyness_before
 
   95 #  define __glibcxx_float_tinyness_before false
 
  100 // Default values.  Should be overridden in configuration files if necessary.
 
  102 #ifndef __glibcxx_double_has_denorm_loss
 
  103 #  define __glibcxx_double_has_denorm_loss false
 
  105 #ifndef __glibcxx_double_traps
 
  106 #  define __glibcxx_double_traps false
 
  108 #ifndef __glibcxx_double_tinyness_before
 
  109 #  define __glibcxx_double_tinyness_before false
 
  114 // Default values.  Should be overridden in configuration files if necessary.
 
  116 #ifndef __glibcxx_long_double_has_denorm_loss
 
  117 #  define __glibcxx_long_double_has_denorm_loss false
 
  119 #ifndef __glibcxx_long_double_traps
 
  120 #  define __glibcxx_long_double_traps false
 
  122 #ifndef __glibcxx_long_double_tinyness_before
 
  123 #  define __glibcxx_long_double_tinyness_before false
 
  126 // You should not need to define any macros below this point.
 
  128 #define __glibcxx_signed(T)    ((T)(-1) < 0)
 
  130 #define __glibcxx_min(T) \
 
  131   (__glibcxx_signed (T) ? -__glibcxx_max (T) - 1 : (T)0)
 
  133 #define __glibcxx_max(T) \
 
  134   (__glibcxx_signed (T) ? \
 
  135    (((((T)1 << (__glibcxx_digits (T) - 1)) - 1) << 1) + 1) : ~(T)0)
 
  137 #define __glibcxx_digits(T) \
 
  138   (sizeof(T) * __CHAR_BIT__ - __glibcxx_signed (T))
 
  140 // The fraction 643/2136 approximates log10(2) to 7 significant digits.
 
  141 #define __glibcxx_digits10(T) \
 
  142   (__glibcxx_digits (T) * 643L / 2136)
 
  144 #define __glibcxx_max_digits10(T) \
 
  145   (2 + (T) * 643L / 2136)
 
  147 namespace std _GLIBCXX_VISIBILITY(default)
 
  149 _GLIBCXX_BEGIN_NAMESPACE_VERSION
 
  152    *  @brief Describes the rounding style for floating-point types.
 
  154    *  This is used in the std::numeric_limits class.
 
  156   enum float_round_style
 
  158     round_indeterminate       = -1,    /// Intermediate.
 
  159     round_toward_zero         = 0,     /// To zero.
 
  160     round_to_nearest          = 1,     /// To the nearest representable value.
 
  161     round_toward_infinity     = 2,     /// To infinity.
 
  162     round_toward_neg_infinity = 3      /// To negative infinity.
 
  166    *  @brief Describes the denormalization for floating-point types.
 
  168    *  These values represent the presence or absence of a variable number
 
  169    *  of exponent bits.  This type is used in the std::numeric_limits class.
 
  171   enum float_denorm_style
 
  173     /// Indeterminate at compile time whether denormalized values are allowed.
 
  174     denorm_indeterminate = -1,
 
  175     /// The type does not allow denormalized values.
 
  177     /// The type allows denormalized values.
 
  182    *  @brief Part of std::numeric_limits.
 
  184    *  The @c static @c const members are usable as integral constant
 
  187    *  @note This is a separate class for purposes of efficiency; you
 
  188    *        should only access these members as part of an instantiation
 
  189    *        of the std::numeric_limits class.
 
  191   struct __numeric_limits_base
 
  193     /** This will be true for all fundamental types (which have
 
  194    specializations), and false for everything else.  */
 
  195     static _GLIBCXX_USE_CONSTEXPR bool is_specialized = false;
 
  197     /** The number of @c radix digits that be represented without change:  for
 
  198    integer types, the number of non-sign bits in the mantissa; for
 
  199    floating types, the number of @c radix digits in the mantissa.  */
 
  200     static _GLIBCXX_USE_CONSTEXPR int digits = 0;
 
  202     /** The number of base 10 digits that can be represented without change. */
 
  203     static _GLIBCXX_USE_CONSTEXPR int digits10 = 0;
 
  205 #if __cplusplus >= 201103L
 
  206     /** The number of base 10 digits required to ensure that values which
 
  207    differ are always differentiated.  */
 
  208     static constexpr int max_digits10 = 0;
 
  211     /** True if the type is signed.  */
 
  212     static _GLIBCXX_USE_CONSTEXPR bool is_signed = false;
 
  214     /** True if the type is integer.  */
 
  215     static _GLIBCXX_USE_CONSTEXPR bool is_integer = false;
 
  217     /** True if the type uses an exact representation. All integer types are
 
  218    exact, but not all exact types are integer.  For example, rational and
 
  219    fixed-exponent representations are exact but not integer. */
 
  220     static _GLIBCXX_USE_CONSTEXPR bool is_exact = false;
 
  222     /** For integer types, specifies the base of the representation.  For
 
  223    floating types, specifies the base of the exponent representation.  */
 
  224     static _GLIBCXX_USE_CONSTEXPR int radix = 0;
 
  226     /** The minimum negative integer such that @c radix raised to the power of
 
  227    (one less than that integer) is a normalized floating point number.  */
 
  228     static _GLIBCXX_USE_CONSTEXPR int min_exponent = 0;
 
  230     /** The minimum negative integer such that 10 raised to that power is in
 
  231    the range of normalized floating point numbers.  */
 
  232     static _GLIBCXX_USE_CONSTEXPR int min_exponent10 = 0;
 
  234     /** The maximum positive integer such that @c radix raised to the power of
 
  235    (one less than that integer) is a representable finite floating point
 
  237     static _GLIBCXX_USE_CONSTEXPR int max_exponent = 0;
 
  239     /** The maximum positive integer such that 10 raised to that power is in
 
  240    the range of representable finite floating point numbers.  */
 
  241     static _GLIBCXX_USE_CONSTEXPR int max_exponent10 = 0;
 
  243     /** True if the type has a representation for positive infinity.  */
 
  244     static _GLIBCXX_USE_CONSTEXPR bool has_infinity = false;
 
  246     /** True if the type has a representation for a quiet (non-signaling)
 
  248     static _GLIBCXX_USE_CONSTEXPR bool has_quiet_NaN = false;
 
  250     /** True if the type has a representation for a signaling
 
  252     static _GLIBCXX_USE_CONSTEXPR bool has_signaling_NaN = false;
 
  254     /** See std::float_denorm_style for more information.  */
 
  255     static _GLIBCXX_USE_CONSTEXPR float_denorm_style has_denorm = denorm_absent;
 
  257     /** True if loss of accuracy is detected as a denormalization loss,
 
  258    rather than as an inexact result. */
 
  259     static _GLIBCXX_USE_CONSTEXPR bool has_denorm_loss = false;
 
  261     /** True if-and-only-if the type adheres to the IEC 559 standard, also
 
  262    known as IEEE 754.  (Only makes sense for floating point types.)  */
 
  263     static _GLIBCXX_USE_CONSTEXPR bool is_iec559 = false;
 
  265     /** True if the set of values representable by the type is
 
  266    finite.  All built-in types are bounded, this member would be
 
  267    false for arbitrary precision types. */
 
  268     static _GLIBCXX_USE_CONSTEXPR bool is_bounded = false;
 
  270     /** True if the type is @e modulo. A type is modulo if, for any
 
  271    operation involving +, -, or * on values of that type whose
 
  272    result would fall outside the range [min(),max()], the value
 
  273    returned differs from the true value by an integer multiple of
 
  274    max() - min() + 1. On most machines, this is false for floating
 
  275    types, true for unsigned integers, and true for signed integers.
 
  276    See PR22200 about signed integers.  */
 
  277     static _GLIBCXX_USE_CONSTEXPR bool is_modulo = false;
 
  279     /** True if trapping is implemented for this type.  */
 
  280     static _GLIBCXX_USE_CONSTEXPR bool traps = false;
 
  282     /** True if tininess is detected before rounding.  (see IEC 559)  */
 
  283     static _GLIBCXX_USE_CONSTEXPR bool tinyness_before = false;
 
  285     /** See std::float_round_style for more information.  This is only
 
  286    meaningful for floating types; integer types will all be
 
  287    round_toward_zero.  */
 
  288     static _GLIBCXX_USE_CONSTEXPR float_round_style round_style = 
 
  293    *  @brief Properties of fundamental types.
 
  295    *  This class allows a program to obtain information about the
 
  296    *  representation of a fundamental type on a given platform.  For
 
  297    *  non-fundamental types, the functions will return 0 and the data
 
  298    *  members will all be @c false.
 
  300    *  _GLIBCXX_RESOLVE_LIB_DEFECTS:  DRs 201 and 184 (hi Gaby!) are
 
  301    *  noted, but not incorporated in this documented (yet).
 
  303   template<typename _Tp>
 
  304     struct numeric_limits : public __numeric_limits_base
 
  306       /** The minimum finite value, or for floating types with
 
  307      denormalization, the minimum positive normalized value.  */
 
  308       static _GLIBCXX_CONSTEXPR _Tp
 
  309       min() _GLIBCXX_USE_NOEXCEPT { return _Tp(); }
 
  311       /** The maximum finite value.  */
 
  312       static _GLIBCXX_CONSTEXPR _Tp
 
  313       max() _GLIBCXX_USE_NOEXCEPT { return _Tp(); }
 
  315 #if __cplusplus >= 201103L
 
  316       /** A finite value x such that there is no other finite value y
 
  319       lowest() noexcept { return _Tp(); }
 
  322       /** The @e machine @e epsilon:  the difference between 1 and the least
 
  323      value greater than 1 that is representable.  */
 
  324       static _GLIBCXX_CONSTEXPR _Tp
 
  325       epsilon() _GLIBCXX_USE_NOEXCEPT { return _Tp(); }
 
  327       /** The maximum rounding error measurement (see LIA-1).  */
 
  328       static _GLIBCXX_CONSTEXPR _Tp
 
  329       round_error() _GLIBCXX_USE_NOEXCEPT { return _Tp(); }
 
  331       /** The representation of positive infinity, if @c has_infinity.  */
 
  332       static _GLIBCXX_CONSTEXPR _Tp
 
  333       infinity() _GLIBCXX_USE_NOEXCEPT { return _Tp(); }
 
  335       /** The representation of a quiet Not a Number,
 
  336      if @c has_quiet_NaN. */
 
  337       static _GLIBCXX_CONSTEXPR _Tp
 
  338       quiet_NaN() _GLIBCXX_USE_NOEXCEPT { return _Tp(); }
 
  340       /** The representation of a signaling Not a Number, if
 
  341      @c has_signaling_NaN. */
 
  342       static _GLIBCXX_CONSTEXPR _Tp
 
  343       signaling_NaN() _GLIBCXX_USE_NOEXCEPT { return _Tp(); }
 
  345       /** The minimum positive denormalized value.  For types where
 
  346      @c has_denorm is false, this is the minimum positive normalized
 
  348       static _GLIBCXX_CONSTEXPR _Tp
 
  349       denorm_min() _GLIBCXX_USE_NOEXCEPT { return _Tp(); }
 
  352 #if __cplusplus >= 201103L
 
  353   template<typename _Tp>
 
  354     struct numeric_limits<const _Tp>
 
  355     : public numeric_limits<_Tp> { };
 
  357   template<typename _Tp>
 
  358     struct numeric_limits<volatile _Tp>
 
  359     : public numeric_limits<_Tp> { };
 
  361   template<typename _Tp>
 
  362     struct numeric_limits<const volatile _Tp>
 
  363     : public numeric_limits<_Tp> { };
 
  366   // Now there follow 16 explicit specializations.  Yes, 16.  Make sure
 
  367   // you get the count right. (18 in c++0x mode)
 
  369   /// numeric_limits<bool> specialization.
 
  371     struct numeric_limits<bool>
 
  373       static _GLIBCXX_USE_CONSTEXPR bool is_specialized = true;
 
  375       static _GLIBCXX_CONSTEXPR bool 
 
  376       min() _GLIBCXX_USE_NOEXCEPT { return false; }
 
  378       static _GLIBCXX_CONSTEXPR bool 
 
  379       max() _GLIBCXX_USE_NOEXCEPT { return true; }
 
  381 #if __cplusplus >= 201103L
 
  382       static constexpr bool
 
  383       lowest() noexcept { return min(); }
 
  385       static _GLIBCXX_USE_CONSTEXPR int digits = 1;
 
  386       static _GLIBCXX_USE_CONSTEXPR int digits10 = 0;
 
  387 #if __cplusplus >= 201103L
 
  388       static constexpr int max_digits10 = 0;
 
  390       static _GLIBCXX_USE_CONSTEXPR bool is_signed = false;
 
  391       static _GLIBCXX_USE_CONSTEXPR bool is_integer = true;
 
  392       static _GLIBCXX_USE_CONSTEXPR bool is_exact = true;
 
  393       static _GLIBCXX_USE_CONSTEXPR int radix = 2;
 
  395       static _GLIBCXX_CONSTEXPR bool 
 
  396       epsilon() _GLIBCXX_USE_NOEXCEPT { return false; }
 
  398       static _GLIBCXX_CONSTEXPR bool 
 
  399       round_error() _GLIBCXX_USE_NOEXCEPT { return false; }
 
  401       static _GLIBCXX_USE_CONSTEXPR int min_exponent = 0;
 
  402       static _GLIBCXX_USE_CONSTEXPR int min_exponent10 = 0;
 
  403       static _GLIBCXX_USE_CONSTEXPR int max_exponent = 0;
 
  404       static _GLIBCXX_USE_CONSTEXPR int max_exponent10 = 0;
 
  406       static _GLIBCXX_USE_CONSTEXPR bool has_infinity = false;
 
  407       static _GLIBCXX_USE_CONSTEXPR bool has_quiet_NaN = false;
 
  408       static _GLIBCXX_USE_CONSTEXPR bool has_signaling_NaN = false;
 
  409       static _GLIBCXX_USE_CONSTEXPR float_denorm_style has_denorm 
 
  411       static _GLIBCXX_USE_CONSTEXPR bool has_denorm_loss = false;
 
  413       static _GLIBCXX_CONSTEXPR bool 
 
  414       infinity() _GLIBCXX_USE_NOEXCEPT { return false; }
 
  416       static _GLIBCXX_CONSTEXPR bool 
 
  417       quiet_NaN() _GLIBCXX_USE_NOEXCEPT { return false; }
 
  419       static _GLIBCXX_CONSTEXPR bool 
 
  420       signaling_NaN() _GLIBCXX_USE_NOEXCEPT { return false; }
 
  422       static _GLIBCXX_CONSTEXPR bool 
 
  423       denorm_min() _GLIBCXX_USE_NOEXCEPT { return false; }
 
  425       static _GLIBCXX_USE_CONSTEXPR bool is_iec559 = false;
 
  426       static _GLIBCXX_USE_CONSTEXPR bool is_bounded = true;
 
  427       static _GLIBCXX_USE_CONSTEXPR bool is_modulo = false;
 
  429       // It is not clear what it means for a boolean type to trap.
 
  430       // This is a DR on the LWG issue list.  Here, I use integer
 
  431       // promotion semantics.
 
  432       static _GLIBCXX_USE_CONSTEXPR bool traps = __glibcxx_integral_traps;
 
  433       static _GLIBCXX_USE_CONSTEXPR bool tinyness_before = false;
 
  434       static _GLIBCXX_USE_CONSTEXPR float_round_style round_style 
 
  438   /// numeric_limits<char> specialization.
 
  440     struct numeric_limits<char>
 
  442       static _GLIBCXX_USE_CONSTEXPR bool is_specialized = true;
 
  444       static _GLIBCXX_CONSTEXPR char 
 
  445       min() _GLIBCXX_USE_NOEXCEPT { return __glibcxx_min(char); }
 
  447       static _GLIBCXX_CONSTEXPR char 
 
  448       max() _GLIBCXX_USE_NOEXCEPT { return __glibcxx_max(char); }
 
  450 #if __cplusplus >= 201103L
 
  451       static constexpr char 
 
  452       lowest() noexcept { return min(); }
 
  455       static _GLIBCXX_USE_CONSTEXPR int digits = __glibcxx_digits (char);
 
  456       static _GLIBCXX_USE_CONSTEXPR int digits10 = __glibcxx_digits10 (char);
 
  457 #if __cplusplus >= 201103L
 
  458       static constexpr int max_digits10 = 0;
 
  460       static _GLIBCXX_USE_CONSTEXPR bool is_signed = __glibcxx_signed (char);
 
  461       static _GLIBCXX_USE_CONSTEXPR bool is_integer = true;
 
  462       static _GLIBCXX_USE_CONSTEXPR bool is_exact = true;
 
  463       static _GLIBCXX_USE_CONSTEXPR int radix = 2;
 
  465       static _GLIBCXX_CONSTEXPR char 
 
  466       epsilon() _GLIBCXX_USE_NOEXCEPT { return 0; }
 
  468       static _GLIBCXX_CONSTEXPR char 
 
  469       round_error() _GLIBCXX_USE_NOEXCEPT { return 0; }
 
  471       static _GLIBCXX_USE_CONSTEXPR int min_exponent = 0;
 
  472       static _GLIBCXX_USE_CONSTEXPR int min_exponent10 = 0;
 
  473       static _GLIBCXX_USE_CONSTEXPR int max_exponent = 0;
 
  474       static _GLIBCXX_USE_CONSTEXPR int max_exponent10 = 0;
 
  476       static _GLIBCXX_USE_CONSTEXPR bool has_infinity = false;
 
  477       static _GLIBCXX_USE_CONSTEXPR bool has_quiet_NaN = false;
 
  478       static _GLIBCXX_USE_CONSTEXPR bool has_signaling_NaN = false;
 
  479       static _GLIBCXX_USE_CONSTEXPR float_denorm_style has_denorm 
 
  481       static _GLIBCXX_USE_CONSTEXPR bool has_denorm_loss = false;
 
  483       static _GLIBCXX_CONSTEXPR 
 
  484       char infinity() _GLIBCXX_USE_NOEXCEPT { return char(); }
 
  486       static _GLIBCXX_CONSTEXPR char 
 
  487       quiet_NaN() _GLIBCXX_USE_NOEXCEPT { return char(); }
 
  489       static _GLIBCXX_CONSTEXPR char 
 
  490       signaling_NaN() _GLIBCXX_USE_NOEXCEPT { return char(); }
 
  492       static _GLIBCXX_CONSTEXPR char 
 
  493       denorm_min() _GLIBCXX_USE_NOEXCEPT { return static_cast<char>(0); }
 
  495       static _GLIBCXX_USE_CONSTEXPR bool is_iec559 = false;
 
  496       static _GLIBCXX_USE_CONSTEXPR bool is_bounded = true;
 
  497       static _GLIBCXX_USE_CONSTEXPR bool is_modulo = !is_signed;
 
  499       static _GLIBCXX_USE_CONSTEXPR bool traps = __glibcxx_integral_traps;
 
  500       static _GLIBCXX_USE_CONSTEXPR bool tinyness_before = false;
 
  501       static _GLIBCXX_USE_CONSTEXPR float_round_style round_style 
 
  505   /// numeric_limits<signed char> specialization.
 
  507     struct numeric_limits<signed char>
 
  509       static _GLIBCXX_USE_CONSTEXPR bool is_specialized = true;
 
  511       static _GLIBCXX_CONSTEXPR signed char 
 
  512       min() _GLIBCXX_USE_NOEXCEPT { return -__SCHAR_MAX__ - 1; }
 
  514       static _GLIBCXX_CONSTEXPR signed char 
 
  515       max() _GLIBCXX_USE_NOEXCEPT { return __SCHAR_MAX__; }
 
  517 #if __cplusplus >= 201103L
 
  518       static constexpr signed char 
 
  519       lowest() noexcept { return min(); }
 
  522       static _GLIBCXX_USE_CONSTEXPR int digits = __glibcxx_digits (signed char);
 
  523       static _GLIBCXX_USE_CONSTEXPR int digits10 
 
  524        = __glibcxx_digits10 (signed char);
 
  525 #if __cplusplus >= 201103L
 
  526       static constexpr int max_digits10 = 0;
 
  528       static _GLIBCXX_USE_CONSTEXPR bool is_signed = true;
 
  529       static _GLIBCXX_USE_CONSTEXPR bool is_integer = true;
 
  530       static _GLIBCXX_USE_CONSTEXPR bool is_exact = true;
 
  531       static _GLIBCXX_USE_CONSTEXPR int radix = 2;
 
  533       static _GLIBCXX_CONSTEXPR signed char 
 
  534       epsilon() _GLIBCXX_USE_NOEXCEPT { return 0; }
 
  536       static _GLIBCXX_CONSTEXPR signed char 
 
  537       round_error() _GLIBCXX_USE_NOEXCEPT { return 0; }
 
  539       static _GLIBCXX_USE_CONSTEXPR int min_exponent = 0;
 
  540       static _GLIBCXX_USE_CONSTEXPR int min_exponent10 = 0;
 
  541       static _GLIBCXX_USE_CONSTEXPR int max_exponent = 0;
 
  542       static _GLIBCXX_USE_CONSTEXPR int max_exponent10 = 0;
 
  544       static _GLIBCXX_USE_CONSTEXPR bool has_infinity = false;
 
  545       static _GLIBCXX_USE_CONSTEXPR bool has_quiet_NaN = false;
 
  546       static _GLIBCXX_USE_CONSTEXPR bool has_signaling_NaN = false;
 
  547       static _GLIBCXX_USE_CONSTEXPR float_denorm_style has_denorm 
 
  549       static _GLIBCXX_USE_CONSTEXPR bool has_denorm_loss = false;
 
  551       static _GLIBCXX_CONSTEXPR signed char 
 
  552       infinity() _GLIBCXX_USE_NOEXCEPT { return static_cast<signed char>(0); }
 
  554       static _GLIBCXX_CONSTEXPR signed char 
 
  555       quiet_NaN() _GLIBCXX_USE_NOEXCEPT { return static_cast<signed char>(0); }
 
  557       static _GLIBCXX_CONSTEXPR signed char 
 
  558       signaling_NaN() _GLIBCXX_USE_NOEXCEPT
 
  559       { return static_cast<signed char>(0); }
 
  561       static _GLIBCXX_CONSTEXPR signed char 
 
  562       denorm_min() _GLIBCXX_USE_NOEXCEPT
 
  563       { return static_cast<signed char>(0); }
 
  565       static _GLIBCXX_USE_CONSTEXPR bool is_iec559 = false;
 
  566       static _GLIBCXX_USE_CONSTEXPR bool is_bounded = true;
 
  567       static _GLIBCXX_USE_CONSTEXPR bool is_modulo = false;
 
  569       static _GLIBCXX_USE_CONSTEXPR bool traps = __glibcxx_integral_traps;
 
  570       static _GLIBCXX_USE_CONSTEXPR bool tinyness_before = false;
 
  571       static _GLIBCXX_USE_CONSTEXPR float_round_style round_style 
 
  575   /// numeric_limits<unsigned char> specialization.
 
  577     struct numeric_limits<unsigned char>
 
  579       static _GLIBCXX_USE_CONSTEXPR bool is_specialized = true;
 
  581       static _GLIBCXX_CONSTEXPR unsigned char 
 
  582       min() _GLIBCXX_USE_NOEXCEPT { return 0; }
 
  584       static _GLIBCXX_CONSTEXPR unsigned char 
 
  585       max() _GLIBCXX_USE_NOEXCEPT { return __SCHAR_MAX__ * 2U + 1; }
 
  587 #if __cplusplus >= 201103L
 
  588       static constexpr unsigned char 
 
  589       lowest() noexcept { return min(); }
 
  592       static _GLIBCXX_USE_CONSTEXPR int digits 
 
  593        = __glibcxx_digits (unsigned char);
 
  594       static _GLIBCXX_USE_CONSTEXPR int digits10 
 
  595        = __glibcxx_digits10 (unsigned char);
 
  596 #if __cplusplus >= 201103L
 
  597       static constexpr int max_digits10 = 0;
 
  599       static _GLIBCXX_USE_CONSTEXPR bool is_signed = false;
 
  600       static _GLIBCXX_USE_CONSTEXPR bool is_integer = true;
 
  601       static _GLIBCXX_USE_CONSTEXPR bool is_exact = true;
 
  602       static _GLIBCXX_USE_CONSTEXPR int radix = 2;
 
  604       static _GLIBCXX_CONSTEXPR unsigned char 
 
  605       epsilon() _GLIBCXX_USE_NOEXCEPT { return 0; }
 
  607       static _GLIBCXX_CONSTEXPR unsigned char 
 
  608       round_error() _GLIBCXX_USE_NOEXCEPT { return 0; }
 
  610       static _GLIBCXX_USE_CONSTEXPR int min_exponent = 0;
 
  611       static _GLIBCXX_USE_CONSTEXPR int min_exponent10 = 0;
 
  612       static _GLIBCXX_USE_CONSTEXPR int max_exponent = 0;
 
  613       static _GLIBCXX_USE_CONSTEXPR int max_exponent10 = 0;
 
  615       static _GLIBCXX_USE_CONSTEXPR bool has_infinity = false;
 
  616       static _GLIBCXX_USE_CONSTEXPR bool has_quiet_NaN = false;
 
  617       static _GLIBCXX_USE_CONSTEXPR bool has_signaling_NaN = false;
 
  618       static _GLIBCXX_USE_CONSTEXPR float_denorm_style has_denorm 
 
  620       static _GLIBCXX_USE_CONSTEXPR bool has_denorm_loss = false;
 
  622       static _GLIBCXX_CONSTEXPR unsigned char 
 
  623       infinity() _GLIBCXX_USE_NOEXCEPT
 
  624       { return static_cast<unsigned char>(0); }
 
  626       static _GLIBCXX_CONSTEXPR unsigned char 
 
  627       quiet_NaN() _GLIBCXX_USE_NOEXCEPT
 
  628       { return static_cast<unsigned char>(0); }
 
  630       static _GLIBCXX_CONSTEXPR unsigned char 
 
  631       signaling_NaN() _GLIBCXX_USE_NOEXCEPT
 
  632       { return static_cast<unsigned char>(0); }
 
  634       static _GLIBCXX_CONSTEXPR unsigned char 
 
  635       denorm_min() _GLIBCXX_USE_NOEXCEPT
 
  636       { return static_cast<unsigned char>(0); }
 
  638       static _GLIBCXX_USE_CONSTEXPR bool is_iec559 = false;
 
  639       static _GLIBCXX_USE_CONSTEXPR bool is_bounded = true;
 
  640       static _GLIBCXX_USE_CONSTEXPR bool is_modulo = true;
 
  642       static _GLIBCXX_USE_CONSTEXPR bool traps = __glibcxx_integral_traps;
 
  643       static _GLIBCXX_USE_CONSTEXPR bool tinyness_before = false;
 
  644       static _GLIBCXX_USE_CONSTEXPR float_round_style round_style 
 
  648   /// numeric_limits<wchar_t> specialization.
 
  650     struct numeric_limits<wchar_t>
 
  652       static _GLIBCXX_USE_CONSTEXPR bool is_specialized = true;
 
  654       static _GLIBCXX_CONSTEXPR wchar_t 
 
  655       min() _GLIBCXX_USE_NOEXCEPT { return __glibcxx_min (wchar_t); }
 
  657       static _GLIBCXX_CONSTEXPR wchar_t 
 
  658       max() _GLIBCXX_USE_NOEXCEPT { return __glibcxx_max (wchar_t); }
 
  660 #if __cplusplus >= 201103L
 
  661       static constexpr wchar_t
 
  662       lowest() noexcept { return min(); }
 
  665       static _GLIBCXX_USE_CONSTEXPR int digits = __glibcxx_digits (wchar_t);
 
  666       static _GLIBCXX_USE_CONSTEXPR int digits10 
 
  667        = __glibcxx_digits10 (wchar_t);
 
  668 #if __cplusplus >= 201103L
 
  669       static constexpr int max_digits10 = 0;
 
  671       static _GLIBCXX_USE_CONSTEXPR bool is_signed = __glibcxx_signed (wchar_t);
 
  672       static _GLIBCXX_USE_CONSTEXPR bool is_integer = true;
 
  673       static _GLIBCXX_USE_CONSTEXPR bool is_exact = true;
 
  674       static _GLIBCXX_USE_CONSTEXPR int radix = 2;
 
  676       static _GLIBCXX_CONSTEXPR wchar_t 
 
  677       epsilon() _GLIBCXX_USE_NOEXCEPT { return 0; }
 
  679       static _GLIBCXX_CONSTEXPR wchar_t 
 
  680       round_error() _GLIBCXX_USE_NOEXCEPT { return 0; }
 
  682       static _GLIBCXX_USE_CONSTEXPR int min_exponent = 0;
 
  683       static _GLIBCXX_USE_CONSTEXPR int min_exponent10 = 0;
 
  684       static _GLIBCXX_USE_CONSTEXPR int max_exponent = 0;
 
  685       static _GLIBCXX_USE_CONSTEXPR int max_exponent10 = 0;
 
  687       static _GLIBCXX_USE_CONSTEXPR bool has_infinity = false;
 
  688       static _GLIBCXX_USE_CONSTEXPR bool has_quiet_NaN = false;
 
  689       static _GLIBCXX_USE_CONSTEXPR bool has_signaling_NaN = false;
 
  690       static _GLIBCXX_USE_CONSTEXPR float_denorm_style has_denorm 
 
  692       static _GLIBCXX_USE_CONSTEXPR bool has_denorm_loss = false;
 
  694       static _GLIBCXX_CONSTEXPR wchar_t 
 
  695       infinity() _GLIBCXX_USE_NOEXCEPT { return wchar_t(); }
 
  697       static _GLIBCXX_CONSTEXPR wchar_t 
 
  698       quiet_NaN() _GLIBCXX_USE_NOEXCEPT { return wchar_t(); }
 
  700       static _GLIBCXX_CONSTEXPR wchar_t 
 
  701       signaling_NaN() _GLIBCXX_USE_NOEXCEPT { return wchar_t(); }
 
  703       static _GLIBCXX_CONSTEXPR wchar_t 
 
  704       denorm_min() _GLIBCXX_USE_NOEXCEPT { return wchar_t(); }
 
  706       static _GLIBCXX_USE_CONSTEXPR bool is_iec559 = false;
 
  707       static _GLIBCXX_USE_CONSTEXPR bool is_bounded = true;
 
  708       static _GLIBCXX_USE_CONSTEXPR bool is_modulo = !is_signed;
 
  710       static _GLIBCXX_USE_CONSTEXPR bool traps = __glibcxx_integral_traps;
 
  711       static _GLIBCXX_USE_CONSTEXPR bool tinyness_before = false;
 
  712       static _GLIBCXX_USE_CONSTEXPR float_round_style round_style 
 
  716 #if __cplusplus >= 201103L
 
  717   /// numeric_limits<char16_t> specialization.
 
  719     struct numeric_limits<char16_t>
 
  721       static constexpr bool is_specialized = true;
 
  723       static constexpr char16_t 
 
  724       min() noexcept { return __glibcxx_min (char16_t); }
 
  726       static constexpr char16_t 
 
  727       max() noexcept { return __glibcxx_max (char16_t); }
 
  729       static constexpr char16_t 
 
  730       lowest() noexcept { return min(); }
 
  732       static constexpr int digits = __glibcxx_digits (char16_t);
 
  733       static constexpr int digits10 = __glibcxx_digits10 (char16_t);
 
  734       static constexpr int max_digits10 = 0;
 
  735       static constexpr bool is_signed = __glibcxx_signed (char16_t);
 
  736       static constexpr bool is_integer = true;
 
  737       static constexpr bool is_exact = true;
 
  738       static constexpr int radix = 2;
 
  740       static constexpr char16_t 
 
  741       epsilon() noexcept { return 0; }
 
  743       static constexpr char16_t 
 
  744       round_error() noexcept { return 0; }
 
  746       static constexpr int min_exponent = 0;
 
  747       static constexpr int min_exponent10 = 0;
 
  748       static constexpr int max_exponent = 0;
 
  749       static constexpr int max_exponent10 = 0;
 
  751       static constexpr bool has_infinity = false;
 
  752       static constexpr bool has_quiet_NaN = false;
 
  753       static constexpr bool has_signaling_NaN = false;
 
  754       static constexpr float_denorm_style has_denorm = denorm_absent;
 
  755       static constexpr bool has_denorm_loss = false;
 
  757       static constexpr char16_t 
 
  758       infinity() noexcept { return char16_t(); }
 
  760       static constexpr char16_t 
 
  761       quiet_NaN() noexcept { return char16_t(); }
 
  763       static constexpr char16_t 
 
  764       signaling_NaN() noexcept { return char16_t(); }
 
  766       static constexpr char16_t 
 
  767       denorm_min() noexcept { return char16_t(); }
 
  769       static constexpr bool is_iec559 = false;
 
  770       static constexpr bool is_bounded = true;
 
  771       static constexpr bool is_modulo = !is_signed;
 
  773       static constexpr bool traps = __glibcxx_integral_traps;
 
  774       static constexpr bool tinyness_before = false;
 
  775       static constexpr float_round_style round_style = round_toward_zero;
 
  778   /// numeric_limits<char32_t> specialization.
 
  780     struct numeric_limits<char32_t>
 
  782       static constexpr bool is_specialized = true;
 
  784       static constexpr char32_t 
 
  785       min() noexcept { return __glibcxx_min (char32_t); }
 
  787       static constexpr char32_t 
 
  788       max() noexcept { return __glibcxx_max (char32_t); }
 
  790       static constexpr char32_t 
 
  791       lowest() noexcept { return min(); }
 
  793       static constexpr int digits = __glibcxx_digits (char32_t);
 
  794       static constexpr int digits10 = __glibcxx_digits10 (char32_t);
 
  795       static constexpr int max_digits10 = 0;
 
  796       static constexpr bool is_signed = __glibcxx_signed (char32_t);
 
  797       static constexpr bool is_integer = true;
 
  798       static constexpr bool is_exact = true;
 
  799       static constexpr int radix = 2;
 
  801       static constexpr char32_t 
 
  802       epsilon() noexcept { return 0; }
 
  804       static constexpr char32_t 
 
  805       round_error() noexcept { return 0; }
 
  807       static constexpr int min_exponent = 0;
 
  808       static constexpr int min_exponent10 = 0;
 
  809       static constexpr int max_exponent = 0;
 
  810       static constexpr int max_exponent10 = 0;
 
  812       static constexpr bool has_infinity = false;
 
  813       static constexpr bool has_quiet_NaN = false;
 
  814       static constexpr bool has_signaling_NaN = false;
 
  815       static constexpr float_denorm_style has_denorm = denorm_absent;
 
  816       static constexpr bool has_denorm_loss = false;
 
  818       static constexpr char32_t 
 
  819       infinity() noexcept { return char32_t(); }
 
  821       static constexpr char32_t 
 
  822       quiet_NaN() noexcept { return char32_t(); }
 
  824       static constexpr char32_t 
 
  825       signaling_NaN() noexcept { return char32_t(); }
 
  827       static constexpr char32_t 
 
  828       denorm_min() noexcept { return char32_t(); }
 
  830       static constexpr bool is_iec559 = false;
 
  831       static constexpr bool is_bounded = true;
 
  832       static constexpr bool is_modulo = !is_signed;
 
  834       static constexpr bool traps = __glibcxx_integral_traps;
 
  835       static constexpr bool tinyness_before = false;
 
  836       static constexpr float_round_style round_style = round_toward_zero;
 
  840   /// numeric_limits<short> specialization.
 
  842     struct numeric_limits<short>
 
  844       static _GLIBCXX_USE_CONSTEXPR bool is_specialized = true;
 
  846       static _GLIBCXX_CONSTEXPR short 
 
  847       min() _GLIBCXX_USE_NOEXCEPT { return -__SHRT_MAX__ - 1; }
 
  849       static _GLIBCXX_CONSTEXPR short 
 
  850       max() _GLIBCXX_USE_NOEXCEPT { return __SHRT_MAX__; }
 
  852 #if __cplusplus >= 201103L
 
  853       static constexpr short 
 
  854       lowest() noexcept { return min(); }
 
  857       static _GLIBCXX_USE_CONSTEXPR int digits = __glibcxx_digits (short);
 
  858       static _GLIBCXX_USE_CONSTEXPR int digits10 = __glibcxx_digits10 (short);
 
  859 #if __cplusplus >= 201103L
 
  860       static constexpr int max_digits10 = 0;
 
  862       static _GLIBCXX_USE_CONSTEXPR bool is_signed = true;
 
  863       static _GLIBCXX_USE_CONSTEXPR bool is_integer = true;
 
  864       static _GLIBCXX_USE_CONSTEXPR bool is_exact = true;
 
  865       static _GLIBCXX_USE_CONSTEXPR int radix = 2;
 
  867       static _GLIBCXX_CONSTEXPR short 
 
  868       epsilon() _GLIBCXX_USE_NOEXCEPT { return 0; }
 
  870       static _GLIBCXX_CONSTEXPR short 
 
  871       round_error() _GLIBCXX_USE_NOEXCEPT { return 0; }
 
  873       static _GLIBCXX_USE_CONSTEXPR int min_exponent = 0;
 
  874       static _GLIBCXX_USE_CONSTEXPR int min_exponent10 = 0;
 
  875       static _GLIBCXX_USE_CONSTEXPR int max_exponent = 0;
 
  876       static _GLIBCXX_USE_CONSTEXPR int max_exponent10 = 0;
 
  878       static _GLIBCXX_USE_CONSTEXPR bool has_infinity = false;
 
  879       static _GLIBCXX_USE_CONSTEXPR bool has_quiet_NaN = false;
 
  880       static _GLIBCXX_USE_CONSTEXPR bool has_signaling_NaN = false;
 
  881       static _GLIBCXX_USE_CONSTEXPR float_denorm_style has_denorm 
 
  883       static _GLIBCXX_USE_CONSTEXPR bool has_denorm_loss = false;
 
  885       static _GLIBCXX_CONSTEXPR short 
 
  886       infinity() _GLIBCXX_USE_NOEXCEPT { return short(); }
 
  888       static _GLIBCXX_CONSTEXPR short 
 
  889       quiet_NaN() _GLIBCXX_USE_NOEXCEPT { return short(); }
 
  891       static _GLIBCXX_CONSTEXPR short 
 
  892       signaling_NaN() _GLIBCXX_USE_NOEXCEPT { return short(); }
 
  894       static _GLIBCXX_CONSTEXPR short 
 
  895       denorm_min() _GLIBCXX_USE_NOEXCEPT { return short(); }
 
  897       static _GLIBCXX_USE_CONSTEXPR bool is_iec559 = false;
 
  898       static _GLIBCXX_USE_CONSTEXPR bool is_bounded = true;
 
  899       static _GLIBCXX_USE_CONSTEXPR bool is_modulo = false;
 
  901       static _GLIBCXX_USE_CONSTEXPR bool traps = __glibcxx_integral_traps;
 
  902       static _GLIBCXX_USE_CONSTEXPR bool tinyness_before = false;
 
  903       static _GLIBCXX_USE_CONSTEXPR float_round_style round_style 
 
  907   /// numeric_limits<unsigned short> specialization.
 
  909     struct numeric_limits<unsigned short>
 
  911       static _GLIBCXX_USE_CONSTEXPR bool is_specialized = true;
 
  913       static _GLIBCXX_CONSTEXPR unsigned short 
 
  914       min() _GLIBCXX_USE_NOEXCEPT { return 0; }
 
  916       static _GLIBCXX_CONSTEXPR unsigned short 
 
  917       max() _GLIBCXX_USE_NOEXCEPT { return __SHRT_MAX__ * 2U + 1; }
 
  919 #if __cplusplus >= 201103L
 
  920       static constexpr unsigned short 
 
  921       lowest() noexcept { return min(); }
 
  924       static _GLIBCXX_USE_CONSTEXPR int digits 
 
  925        = __glibcxx_digits (unsigned short);
 
  926       static _GLIBCXX_USE_CONSTEXPR int digits10 
 
  927        = __glibcxx_digits10 (unsigned short);
 
  928 #if __cplusplus >= 201103L
 
  929       static constexpr int max_digits10 = 0;
 
  931       static _GLIBCXX_USE_CONSTEXPR bool is_signed = false;
 
  932       static _GLIBCXX_USE_CONSTEXPR bool is_integer = true;
 
  933       static _GLIBCXX_USE_CONSTEXPR bool is_exact = true;
 
  934       static _GLIBCXX_USE_CONSTEXPR int radix = 2;
 
  936       static _GLIBCXX_CONSTEXPR unsigned short 
 
  937       epsilon() _GLIBCXX_USE_NOEXCEPT { return 0; }
 
  939       static _GLIBCXX_CONSTEXPR unsigned short 
 
  940       round_error() _GLIBCXX_USE_NOEXCEPT { return 0; }
 
  942       static _GLIBCXX_USE_CONSTEXPR int min_exponent = 0;
 
  943       static _GLIBCXX_USE_CONSTEXPR int min_exponent10 = 0;
 
  944       static _GLIBCXX_USE_CONSTEXPR int max_exponent = 0;
 
  945       static _GLIBCXX_USE_CONSTEXPR int max_exponent10 = 0;
 
  947       static _GLIBCXX_USE_CONSTEXPR bool has_infinity = false;
 
  948       static _GLIBCXX_USE_CONSTEXPR bool has_quiet_NaN = false;
 
  949       static _GLIBCXX_USE_CONSTEXPR bool has_signaling_NaN = false;
 
  950       static _GLIBCXX_USE_CONSTEXPR float_denorm_style has_denorm 
 
  952       static _GLIBCXX_USE_CONSTEXPR bool has_denorm_loss = false;
 
  954       static _GLIBCXX_CONSTEXPR unsigned short 
 
  955       infinity() _GLIBCXX_USE_NOEXCEPT
 
  956       { return static_cast<unsigned short>(0); }
 
  958       static _GLIBCXX_CONSTEXPR unsigned short 
 
  959       quiet_NaN() _GLIBCXX_USE_NOEXCEPT
 
  960       { return static_cast<unsigned short>(0); }
 
  962       static _GLIBCXX_CONSTEXPR unsigned short 
 
  963       signaling_NaN() _GLIBCXX_USE_NOEXCEPT
 
  964       { return static_cast<unsigned short>(0); }
 
  966       static _GLIBCXX_CONSTEXPR unsigned short 
 
  967       denorm_min() _GLIBCXX_USE_NOEXCEPT
 
  968       { return static_cast<unsigned short>(0); }
 
  970       static _GLIBCXX_USE_CONSTEXPR bool is_iec559 = false;
 
  971       static _GLIBCXX_USE_CONSTEXPR bool is_bounded = true;
 
  972       static _GLIBCXX_USE_CONSTEXPR bool is_modulo = true;
 
  974       static _GLIBCXX_USE_CONSTEXPR bool traps = __glibcxx_integral_traps;
 
  975       static _GLIBCXX_USE_CONSTEXPR bool tinyness_before = false;
 
  976       static _GLIBCXX_USE_CONSTEXPR float_round_style round_style 
 
  980   /// numeric_limits<int> specialization.
 
  982     struct numeric_limits<int>
 
  984       static _GLIBCXX_USE_CONSTEXPR bool is_specialized = true;
 
  986       static _GLIBCXX_CONSTEXPR int 
 
  987       min() _GLIBCXX_USE_NOEXCEPT { return -__INT_MAX__ - 1; }
 
  989       static _GLIBCXX_CONSTEXPR int 
 
  990       max() _GLIBCXX_USE_NOEXCEPT { return __INT_MAX__; }
 
  992 #if __cplusplus >= 201103L
 
  994       lowest() noexcept { return min(); }
 
  997       static _GLIBCXX_USE_CONSTEXPR int digits = __glibcxx_digits (int);
 
  998       static _GLIBCXX_USE_CONSTEXPR int digits10 = __glibcxx_digits10 (int);
 
  999 #if __cplusplus >= 201103L
 
 1000       static constexpr int max_digits10 = 0;
 
 1002       static _GLIBCXX_USE_CONSTEXPR bool is_signed = true;
 
 1003       static _GLIBCXX_USE_CONSTEXPR bool is_integer = true;
 
 1004       static _GLIBCXX_USE_CONSTEXPR bool is_exact = true;
 
 1005       static _GLIBCXX_USE_CONSTEXPR int radix = 2;
 
 1007       static _GLIBCXX_CONSTEXPR int 
 
 1008       epsilon() _GLIBCXX_USE_NOEXCEPT { return 0; }
 
 1010       static _GLIBCXX_CONSTEXPR int 
 
 1011       round_error() _GLIBCXX_USE_NOEXCEPT { return 0; }
 
 1013       static _GLIBCXX_USE_CONSTEXPR int min_exponent = 0;
 
 1014       static _GLIBCXX_USE_CONSTEXPR int min_exponent10 = 0;
 
 1015       static _GLIBCXX_USE_CONSTEXPR int max_exponent = 0;
 
 1016       static _GLIBCXX_USE_CONSTEXPR int max_exponent10 = 0;
 
 1018       static _GLIBCXX_USE_CONSTEXPR bool has_infinity = false;
 
 1019       static _GLIBCXX_USE_CONSTEXPR bool has_quiet_NaN = false;
 
 1020       static _GLIBCXX_USE_CONSTEXPR bool has_signaling_NaN = false;
 
 1021       static _GLIBCXX_USE_CONSTEXPR float_denorm_style has_denorm 
 
 1023       static _GLIBCXX_USE_CONSTEXPR bool has_denorm_loss = false;
 
 1025       static _GLIBCXX_CONSTEXPR int 
 
 1026       infinity() _GLIBCXX_USE_NOEXCEPT { return static_cast<int>(0); }
 
 1028       static _GLIBCXX_CONSTEXPR int 
 
 1029       quiet_NaN() _GLIBCXX_USE_NOEXCEPT { return static_cast<int>(0); }
 
 1031       static _GLIBCXX_CONSTEXPR int 
 
 1032       signaling_NaN() _GLIBCXX_USE_NOEXCEPT { return static_cast<int>(0); }
 
 1034       static _GLIBCXX_CONSTEXPR int 
 
 1035       denorm_min() _GLIBCXX_USE_NOEXCEPT { return static_cast<int>(0); }
 
 1037       static _GLIBCXX_USE_CONSTEXPR bool is_iec559 = false;
 
 1038       static _GLIBCXX_USE_CONSTEXPR bool is_bounded = true;
 
 1039       static _GLIBCXX_USE_CONSTEXPR bool is_modulo = false;
 
 1041       static _GLIBCXX_USE_CONSTEXPR bool traps = __glibcxx_integral_traps;
 
 1042       static _GLIBCXX_USE_CONSTEXPR bool tinyness_before = false;
 
 1043       static _GLIBCXX_USE_CONSTEXPR float_round_style round_style 
 
 1044        = round_toward_zero;
 
 1047   /// numeric_limits<unsigned int> specialization.
 
 1049     struct numeric_limits<unsigned int>
 
 1051       static _GLIBCXX_USE_CONSTEXPR bool is_specialized = true;
 
 1053       static _GLIBCXX_CONSTEXPR unsigned int 
 
 1054       min() _GLIBCXX_USE_NOEXCEPT { return 0; }
 
 1056       static _GLIBCXX_CONSTEXPR unsigned int 
 
 1057       max() _GLIBCXX_USE_NOEXCEPT { return __INT_MAX__ * 2U + 1; }
 
 1059 #if __cplusplus >= 201103L
 
 1060       static constexpr unsigned int 
 
 1061       lowest() noexcept { return min(); }
 
 1064       static _GLIBCXX_USE_CONSTEXPR int digits 
 
 1065        = __glibcxx_digits (unsigned int);
 
 1066       static _GLIBCXX_USE_CONSTEXPR int digits10 
 
 1067        = __glibcxx_digits10 (unsigned int);
 
 1068 #if __cplusplus >= 201103L
 
 1069       static constexpr int max_digits10 = 0;
 
 1071       static _GLIBCXX_USE_CONSTEXPR bool is_signed = false;
 
 1072       static _GLIBCXX_USE_CONSTEXPR bool is_integer = true;
 
 1073       static _GLIBCXX_USE_CONSTEXPR bool is_exact = true;
 
 1074       static _GLIBCXX_USE_CONSTEXPR int radix = 2;
 
 1076       static _GLIBCXX_CONSTEXPR unsigned int 
 
 1077       epsilon() _GLIBCXX_USE_NOEXCEPT { return 0; }
 
 1079       static _GLIBCXX_CONSTEXPR unsigned int 
 
 1080       round_error() _GLIBCXX_USE_NOEXCEPT { return 0; }
 
 1082       static _GLIBCXX_USE_CONSTEXPR int min_exponent = 0;
 
 1083       static _GLIBCXX_USE_CONSTEXPR int min_exponent10 = 0;
 
 1084       static _GLIBCXX_USE_CONSTEXPR int max_exponent = 0;
 
 1085       static _GLIBCXX_USE_CONSTEXPR int max_exponent10 = 0;
 
 1087       static _GLIBCXX_USE_CONSTEXPR bool has_infinity = false;
 
 1088       static _GLIBCXX_USE_CONSTEXPR bool has_quiet_NaN = false;
 
 1089       static _GLIBCXX_USE_CONSTEXPR bool has_signaling_NaN = false;
 
 1090       static _GLIBCXX_USE_CONSTEXPR float_denorm_style has_denorm 
 
 1092       static _GLIBCXX_USE_CONSTEXPR bool has_denorm_loss = false;
 
 1094       static _GLIBCXX_CONSTEXPR unsigned int 
 
 1095       infinity() _GLIBCXX_USE_NOEXCEPT { return static_cast<unsigned int>(0); }
 
 1097       static _GLIBCXX_CONSTEXPR unsigned int 
 
 1098       quiet_NaN() _GLIBCXX_USE_NOEXCEPT
 
 1099       { return static_cast<unsigned int>(0); }
 
 1101       static _GLIBCXX_CONSTEXPR unsigned int 
 
 1102       signaling_NaN() _GLIBCXX_USE_NOEXCEPT
 
 1103       { return static_cast<unsigned int>(0); }
 
 1105       static _GLIBCXX_CONSTEXPR unsigned int 
 
 1106       denorm_min() _GLIBCXX_USE_NOEXCEPT
 
 1107       { return static_cast<unsigned int>(0); }
 
 1109       static _GLIBCXX_USE_CONSTEXPR bool is_iec559 = false;
 
 1110       static _GLIBCXX_USE_CONSTEXPR bool is_bounded = true;
 
 1111       static _GLIBCXX_USE_CONSTEXPR bool is_modulo = true;
 
 1113       static _GLIBCXX_USE_CONSTEXPR bool traps = __glibcxx_integral_traps;
 
 1114       static _GLIBCXX_USE_CONSTEXPR bool tinyness_before = false;
 
 1115       static _GLIBCXX_USE_CONSTEXPR float_round_style round_style 
 
 1116        = round_toward_zero;
 
 1119   /// numeric_limits<long> specialization.
 
 1121     struct numeric_limits<long>
 
 1123       static _GLIBCXX_USE_CONSTEXPR bool is_specialized = true;
 
 1125       static _GLIBCXX_CONSTEXPR long
 
 1126       min() _GLIBCXX_USE_NOEXCEPT { return -__LONG_MAX__ - 1; }
 
 1128       static _GLIBCXX_CONSTEXPR long 
 
 1129       max() _GLIBCXX_USE_NOEXCEPT { return __LONG_MAX__; }
 
 1131 #if __cplusplus >= 201103L
 
 1132       static constexpr long 
 
 1133       lowest() noexcept { return min(); }
 
 1136       static _GLIBCXX_USE_CONSTEXPR int digits = __glibcxx_digits (long);
 
 1137       static _GLIBCXX_USE_CONSTEXPR int digits10 = __glibcxx_digits10 (long);
 
 1138 #if __cplusplus >= 201103L
 
 1139       static constexpr int max_digits10 = 0;
 
 1141       static _GLIBCXX_USE_CONSTEXPR bool is_signed = true;
 
 1142       static _GLIBCXX_USE_CONSTEXPR bool is_integer = true;
 
 1143       static _GLIBCXX_USE_CONSTEXPR bool is_exact = true;
 
 1144       static _GLIBCXX_USE_CONSTEXPR int radix = 2;
 
 1146       static _GLIBCXX_CONSTEXPR long 
 
 1147       epsilon() _GLIBCXX_USE_NOEXCEPT { return 0; }
 
 1149       static _GLIBCXX_CONSTEXPR long 
 
 1150       round_error() _GLIBCXX_USE_NOEXCEPT { return 0; }
 
 1152       static _GLIBCXX_USE_CONSTEXPR int min_exponent = 0;
 
 1153       static _GLIBCXX_USE_CONSTEXPR int min_exponent10 = 0;
 
 1154       static _GLIBCXX_USE_CONSTEXPR int max_exponent = 0;
 
 1155       static _GLIBCXX_USE_CONSTEXPR int max_exponent10 = 0;
 
 1157       static _GLIBCXX_USE_CONSTEXPR bool has_infinity = false;
 
 1158       static _GLIBCXX_USE_CONSTEXPR bool has_quiet_NaN = false;
 
 1159       static _GLIBCXX_USE_CONSTEXPR bool has_signaling_NaN = false;
 
 1160       static _GLIBCXX_USE_CONSTEXPR float_denorm_style has_denorm 
 
 1162       static _GLIBCXX_USE_CONSTEXPR bool has_denorm_loss = false;
 
 1164       static _GLIBCXX_CONSTEXPR long 
 
 1165       infinity() _GLIBCXX_USE_NOEXCEPT { return static_cast<long>(0); }
 
 1167       static _GLIBCXX_CONSTEXPR long 
 
 1168       quiet_NaN() _GLIBCXX_USE_NOEXCEPT { return static_cast<long>(0); }
 
 1170       static _GLIBCXX_CONSTEXPR long 
 
 1171       signaling_NaN() _GLIBCXX_USE_NOEXCEPT { return static_cast<long>(0); }
 
 1173       static _GLIBCXX_CONSTEXPR long 
 
 1174       denorm_min() _GLIBCXX_USE_NOEXCEPT { return static_cast<long>(0); }
 
 1176       static _GLIBCXX_USE_CONSTEXPR bool is_iec559 = false;
 
 1177       static _GLIBCXX_USE_CONSTEXPR bool is_bounded = true;
 
 1178       static _GLIBCXX_USE_CONSTEXPR bool is_modulo = false;
 
 1180       static _GLIBCXX_USE_CONSTEXPR bool traps = __glibcxx_integral_traps;
 
 1181       static _GLIBCXX_USE_CONSTEXPR bool tinyness_before = false;
 
 1182       static _GLIBCXX_USE_CONSTEXPR float_round_style round_style 
 
 1183        = round_toward_zero;
 
 1186   /// numeric_limits<unsigned long> specialization.
 
 1188     struct numeric_limits<unsigned long>
 
 1190       static _GLIBCXX_USE_CONSTEXPR bool is_specialized = true;
 
 1192       static _GLIBCXX_CONSTEXPR unsigned long 
 
 1193       min() _GLIBCXX_USE_NOEXCEPT { return 0; }
 
 1195       static _GLIBCXX_CONSTEXPR unsigned long 
 
 1196       max() _GLIBCXX_USE_NOEXCEPT { return __LONG_MAX__ * 2UL + 1; }
 
 1198 #if __cplusplus >= 201103L
 
 1199       static constexpr unsigned long 
 
 1200       lowest() noexcept { return min(); }
 
 1203       static _GLIBCXX_USE_CONSTEXPR int digits 
 
 1204        = __glibcxx_digits (unsigned long);
 
 1205       static _GLIBCXX_USE_CONSTEXPR int digits10 
 
 1206        = __glibcxx_digits10 (unsigned long);
 
 1207 #if __cplusplus >= 201103L
 
 1208       static constexpr int max_digits10 = 0;
 
 1210       static _GLIBCXX_USE_CONSTEXPR bool is_signed = false;
 
 1211       static _GLIBCXX_USE_CONSTEXPR bool is_integer = true;
 
 1212       static _GLIBCXX_USE_CONSTEXPR bool is_exact = true;
 
 1213       static _GLIBCXX_USE_CONSTEXPR int radix = 2;
 
 1215       static _GLIBCXX_CONSTEXPR unsigned long 
 
 1216       epsilon() _GLIBCXX_USE_NOEXCEPT { return 0; }
 
 1218       static _GLIBCXX_CONSTEXPR unsigned long 
 
 1219       round_error() _GLIBCXX_USE_NOEXCEPT { return 0; }
 
 1221       static _GLIBCXX_USE_CONSTEXPR int min_exponent = 0;
 
 1222       static _GLIBCXX_USE_CONSTEXPR int min_exponent10 = 0;
 
 1223       static _GLIBCXX_USE_CONSTEXPR int max_exponent = 0;
 
 1224       static _GLIBCXX_USE_CONSTEXPR int max_exponent10 = 0;
 
 1226       static _GLIBCXX_USE_CONSTEXPR bool has_infinity = false;
 
 1227       static _GLIBCXX_USE_CONSTEXPR bool has_quiet_NaN = false;
 
 1228       static _GLIBCXX_USE_CONSTEXPR bool has_signaling_NaN = false;
 
 1229       static _GLIBCXX_USE_CONSTEXPR float_denorm_style has_denorm 
 
 1231       static _GLIBCXX_USE_CONSTEXPR bool has_denorm_loss = false;
 
 1233       static _GLIBCXX_CONSTEXPR unsigned long 
 
 1234       infinity() _GLIBCXX_USE_NOEXCEPT
 
 1235       { return static_cast<unsigned long>(0); }
 
 1237       static _GLIBCXX_CONSTEXPR unsigned long 
 
 1238       quiet_NaN() _GLIBCXX_USE_NOEXCEPT
 
 1239       { return static_cast<unsigned long>(0); }
 
 1241       static _GLIBCXX_CONSTEXPR unsigned long 
 
 1242       signaling_NaN() _GLIBCXX_USE_NOEXCEPT
 
 1243       { return static_cast<unsigned long>(0); }
 
 1245       static _GLIBCXX_CONSTEXPR unsigned long 
 
 1246       denorm_min() _GLIBCXX_USE_NOEXCEPT
 
 1247       { return static_cast<unsigned long>(0); }
 
 1249       static _GLIBCXX_USE_CONSTEXPR bool is_iec559 = false;
 
 1250       static _GLIBCXX_USE_CONSTEXPR bool is_bounded = true;
 
 1251       static _GLIBCXX_USE_CONSTEXPR bool is_modulo = true;
 
 1253       static _GLIBCXX_USE_CONSTEXPR bool traps = __glibcxx_integral_traps;
 
 1254       static _GLIBCXX_USE_CONSTEXPR bool tinyness_before = false;
 
 1255       static _GLIBCXX_USE_CONSTEXPR float_round_style round_style 
 
 1256        = round_toward_zero;
 
 1259   /// numeric_limits<long long> specialization.
 
 1261     struct numeric_limits<long long>
 
 1263       static _GLIBCXX_USE_CONSTEXPR bool is_specialized = true;
 
 1265       static _GLIBCXX_CONSTEXPR long long 
 
 1266       min() _GLIBCXX_USE_NOEXCEPT { return -__LONG_LONG_MAX__ - 1; }
 
 1268       static _GLIBCXX_CONSTEXPR long long 
 
 1269       max() _GLIBCXX_USE_NOEXCEPT { return __LONG_LONG_MAX__; }
 
 1271 #if __cplusplus >= 201103L
 
 1272       static constexpr long long 
 
 1273       lowest() noexcept { return min(); }
 
 1276       static _GLIBCXX_USE_CONSTEXPR int digits 
 
 1277        = __glibcxx_digits (long long);
 
 1278       static _GLIBCXX_USE_CONSTEXPR int digits10 
 
 1279        = __glibcxx_digits10 (long long);
 
 1280 #if __cplusplus >= 201103L
 
 1281       static constexpr int max_digits10 = 0;
 
 1283       static _GLIBCXX_USE_CONSTEXPR bool is_signed = true;
 
 1284       static _GLIBCXX_USE_CONSTEXPR bool is_integer = true;
 
 1285       static _GLIBCXX_USE_CONSTEXPR bool is_exact = true;
 
 1286       static _GLIBCXX_USE_CONSTEXPR int radix = 2;
 
 1288       static _GLIBCXX_CONSTEXPR long long 
 
 1289       epsilon() _GLIBCXX_USE_NOEXCEPT { return 0; }
 
 1291       static _GLIBCXX_CONSTEXPR long long 
 
 1292       round_error() _GLIBCXX_USE_NOEXCEPT { return 0; }
 
 1294       static _GLIBCXX_USE_CONSTEXPR int min_exponent = 0;
 
 1295       static _GLIBCXX_USE_CONSTEXPR int min_exponent10 = 0;
 
 1296       static _GLIBCXX_USE_CONSTEXPR int max_exponent = 0;
 
 1297       static _GLIBCXX_USE_CONSTEXPR int max_exponent10 = 0;
 
 1299       static _GLIBCXX_USE_CONSTEXPR bool has_infinity = false;
 
 1300       static _GLIBCXX_USE_CONSTEXPR bool has_quiet_NaN = false;
 
 1301       static _GLIBCXX_USE_CONSTEXPR bool has_signaling_NaN = false;
 
 1302       static _GLIBCXX_USE_CONSTEXPR float_denorm_style has_denorm 
 
 1304       static _GLIBCXX_USE_CONSTEXPR bool has_denorm_loss = false;
 
 1306       static _GLIBCXX_CONSTEXPR long long 
 
 1307       infinity() _GLIBCXX_USE_NOEXCEPT { return static_cast<long long>(0); }
 
 1309       static _GLIBCXX_CONSTEXPR long long 
 
 1310       quiet_NaN() _GLIBCXX_USE_NOEXCEPT { return static_cast<long long>(0); }
 
 1312       static _GLIBCXX_CONSTEXPR long long 
 
 1313       signaling_NaN() _GLIBCXX_USE_NOEXCEPT
 
 1314       { return static_cast<long long>(0); }
 
 1316       static _GLIBCXX_CONSTEXPR long long 
 
 1317       denorm_min() _GLIBCXX_USE_NOEXCEPT { return static_cast<long long>(0); }
 
 1319       static _GLIBCXX_USE_CONSTEXPR bool is_iec559 = false;
 
 1320       static _GLIBCXX_USE_CONSTEXPR bool is_bounded = true;
 
 1321       static _GLIBCXX_USE_CONSTEXPR bool is_modulo = false;
 
 1323       static _GLIBCXX_USE_CONSTEXPR bool traps = __glibcxx_integral_traps;
 
 1324       static _GLIBCXX_USE_CONSTEXPR bool tinyness_before = false;
 
 1325       static _GLIBCXX_USE_CONSTEXPR float_round_style round_style 
 
 1326        = round_toward_zero;
 
 1329   /// numeric_limits<unsigned long long> specialization.
 
 1331     struct numeric_limits<unsigned long long>
 
 1333       static _GLIBCXX_USE_CONSTEXPR bool is_specialized = true;
 
 1335       static _GLIBCXX_CONSTEXPR unsigned long long 
 
 1336       min() _GLIBCXX_USE_NOEXCEPT { return 0; }
 
 1338       static _GLIBCXX_CONSTEXPR unsigned long long 
 
 1339       max() _GLIBCXX_USE_NOEXCEPT { return __LONG_LONG_MAX__ * 2ULL + 1; }
 
 1341 #if __cplusplus >= 201103L
 
 1342       static constexpr unsigned long long 
 
 1343       lowest() noexcept { return min(); }
 
 1346       static _GLIBCXX_USE_CONSTEXPR int digits 
 
 1347        = __glibcxx_digits (unsigned long long);
 
 1348       static _GLIBCXX_USE_CONSTEXPR int digits10 
 
 1349        = __glibcxx_digits10 (unsigned long long);
 
 1350 #if __cplusplus >= 201103L
 
 1351       static constexpr int max_digits10 = 0;
 
 1353       static _GLIBCXX_USE_CONSTEXPR bool is_signed = false;
 
 1354       static _GLIBCXX_USE_CONSTEXPR bool is_integer = true;
 
 1355       static _GLIBCXX_USE_CONSTEXPR bool is_exact = true;
 
 1356       static _GLIBCXX_USE_CONSTEXPR int radix = 2;
 
 1358       static _GLIBCXX_CONSTEXPR unsigned long long 
 
 1359       epsilon() _GLIBCXX_USE_NOEXCEPT { return 0; }
 
 1361       static _GLIBCXX_CONSTEXPR unsigned long long 
 
 1362       round_error() _GLIBCXX_USE_NOEXCEPT { return 0; }
 
 1364       static _GLIBCXX_USE_CONSTEXPR int min_exponent = 0;
 
 1365       static _GLIBCXX_USE_CONSTEXPR int min_exponent10 = 0;
 
 1366       static _GLIBCXX_USE_CONSTEXPR int max_exponent = 0;
 
 1367       static _GLIBCXX_USE_CONSTEXPR int max_exponent10 = 0;
 
 1369       static _GLIBCXX_USE_CONSTEXPR bool has_infinity = false;
 
 1370       static _GLIBCXX_USE_CONSTEXPR bool has_quiet_NaN = false;
 
 1371       static _GLIBCXX_USE_CONSTEXPR bool has_signaling_NaN = false;
 
 1372       static _GLIBCXX_USE_CONSTEXPR float_denorm_style has_denorm 
 
 1374       static _GLIBCXX_USE_CONSTEXPR bool has_denorm_loss = false;
 
 1376       static _GLIBCXX_CONSTEXPR unsigned long long 
 
 1377       infinity() _GLIBCXX_USE_NOEXCEPT
 
 1378       { return static_cast<unsigned long long>(0); }
 
 1380       static _GLIBCXX_CONSTEXPR unsigned long long 
 
 1381       quiet_NaN() _GLIBCXX_USE_NOEXCEPT
 
 1382       { return static_cast<unsigned long long>(0); }
 
 1384       static _GLIBCXX_CONSTEXPR unsigned long long 
 
 1385       signaling_NaN() _GLIBCXX_USE_NOEXCEPT
 
 1386       { return static_cast<unsigned long long>(0); }
 
 1388       static _GLIBCXX_CONSTEXPR unsigned long long 
 
 1389       denorm_min() _GLIBCXX_USE_NOEXCEPT
 
 1390       { return static_cast<unsigned long long>(0); }
 
 1392       static _GLIBCXX_USE_CONSTEXPR bool is_iec559 = false;
 
 1393       static _GLIBCXX_USE_CONSTEXPR bool is_bounded = true;
 
 1394       static _GLIBCXX_USE_CONSTEXPR bool is_modulo = true;
 
 1396       static _GLIBCXX_USE_CONSTEXPR bool traps = __glibcxx_integral_traps;
 
 1397       static _GLIBCXX_USE_CONSTEXPR bool tinyness_before = false;
 
 1398       static _GLIBCXX_USE_CONSTEXPR float_round_style round_style 
 
 1399        = round_toward_zero;
 
 1402 #if !defined(__STRICT_ANSI__) && defined(_GLIBCXX_USE_INT128)
 
 1403   /// numeric_limits<__int128> specialization.
 
 1405     struct numeric_limits<__int128>
 
 1407       static _GLIBCXX_USE_CONSTEXPR bool is_specialized = true;
 
 1409       static _GLIBCXX_CONSTEXPR __int128
 
 1410       min() _GLIBCXX_USE_NOEXCEPT { return __glibcxx_min (__int128); }
 
 1412       static _GLIBCXX_CONSTEXPR __int128
 
 1413       max() _GLIBCXX_USE_NOEXCEPT { return __glibcxx_max (__int128); }
 
 1415 #if __cplusplus >= 201103L
 
 1416       static constexpr __int128
 
 1417       lowest() noexcept { return min(); }
 
 1420       static _GLIBCXX_USE_CONSTEXPR int digits
 
 1421        = __glibcxx_digits (__int128);
 
 1422       static _GLIBCXX_USE_CONSTEXPR int digits10
 
 1423        = __glibcxx_digits10 (__int128);
 
 1424 #if __cplusplus >= 201103L
 
 1425       static constexpr int max_digits10 = 0;
 
 1427       static _GLIBCXX_USE_CONSTEXPR bool is_signed = true;
 
 1428       static _GLIBCXX_USE_CONSTEXPR bool is_integer = true;
 
 1429       static _GLIBCXX_USE_CONSTEXPR bool is_exact = true;
 
 1430       static _GLIBCXX_USE_CONSTEXPR int radix = 2;
 
 1432       static _GLIBCXX_CONSTEXPR __int128
 
 1433       epsilon() _GLIBCXX_USE_NOEXCEPT { return 0; }
 
 1435       static _GLIBCXX_CONSTEXPR __int128
 
 1436       round_error() _GLIBCXX_USE_NOEXCEPT { return 0; }
 
 1438       static _GLIBCXX_USE_CONSTEXPR int min_exponent = 0;
 
 1439       static _GLIBCXX_USE_CONSTEXPR int min_exponent10 = 0;
 
 1440       static _GLIBCXX_USE_CONSTEXPR int max_exponent = 0;
 
 1441       static _GLIBCXX_USE_CONSTEXPR int max_exponent10 = 0;
 
 1443       static _GLIBCXX_USE_CONSTEXPR bool has_infinity = false;
 
 1444       static _GLIBCXX_USE_CONSTEXPR bool has_quiet_NaN = false;
 
 1445       static _GLIBCXX_USE_CONSTEXPR bool has_signaling_NaN = false;
 
 1446       static _GLIBCXX_USE_CONSTEXPR float_denorm_style has_denorm
 
 1448       static _GLIBCXX_USE_CONSTEXPR bool has_denorm_loss = false;
 
 1450       static _GLIBCXX_CONSTEXPR __int128
 
 1451       infinity() _GLIBCXX_USE_NOEXCEPT
 
 1452       { return static_cast<__int128>(0); }
 
 1454       static _GLIBCXX_CONSTEXPR __int128
 
 1455       quiet_NaN() _GLIBCXX_USE_NOEXCEPT
 
 1456       { return static_cast<__int128>(0); }
 
 1458       static _GLIBCXX_CONSTEXPR __int128
 
 1459       signaling_NaN() _GLIBCXX_USE_NOEXCEPT
 
 1460       { return static_cast<__int128>(0); }
 
 1462       static _GLIBCXX_CONSTEXPR __int128
 
 1463       denorm_min() _GLIBCXX_USE_NOEXCEPT
 
 1464       { return static_cast<__int128>(0); }
 
 1466       static _GLIBCXX_USE_CONSTEXPR bool is_iec559 = false;
 
 1467       static _GLIBCXX_USE_CONSTEXPR bool is_bounded = true;
 
 1468       static _GLIBCXX_USE_CONSTEXPR bool is_modulo = false;
 
 1470       static _GLIBCXX_USE_CONSTEXPR bool traps
 
 1471        = __glibcxx_integral_traps;
 
 1472       static _GLIBCXX_USE_CONSTEXPR bool tinyness_before = false;
 
 1473       static _GLIBCXX_USE_CONSTEXPR float_round_style round_style
 
 1474        = round_toward_zero;
 
 1477   /// numeric_limits<unsigned __int128> specialization.
 
 1479     struct numeric_limits<unsigned __int128>
 
 1481       static _GLIBCXX_USE_CONSTEXPR bool is_specialized = true;
 
 1483       static _GLIBCXX_CONSTEXPR unsigned __int128
 
 1484       min() _GLIBCXX_USE_NOEXCEPT { return 0; }
 
 1486       static _GLIBCXX_CONSTEXPR unsigned __int128
 
 1487       max() _GLIBCXX_USE_NOEXCEPT { return __glibcxx_max (unsigned __int128); }
 
 1489 #if __cplusplus >= 201103L
 
 1490       static constexpr unsigned __int128
 
 1491       lowest() noexcept { return min(); }
 
 1494       static _GLIBCXX_USE_CONSTEXPR int digits
 
 1495        = __glibcxx_digits (unsigned __int128);
 
 1496       static _GLIBCXX_USE_CONSTEXPR int digits10
 
 1497        = __glibcxx_digits10 (unsigned __int128);
 
 1498 #if __cplusplus >= 201103L
 
 1499       static constexpr int max_digits10 = 0;
 
 1501       static _GLIBCXX_USE_CONSTEXPR bool is_signed = false;
 
 1502       static _GLIBCXX_USE_CONSTEXPR bool is_integer = true;
 
 1503       static _GLIBCXX_USE_CONSTEXPR bool is_exact = true;
 
 1504       static _GLIBCXX_USE_CONSTEXPR int radix = 2;
 
 1506       static _GLIBCXX_CONSTEXPR unsigned __int128
 
 1507       epsilon() _GLIBCXX_USE_NOEXCEPT { return 0; }
 
 1509       static _GLIBCXX_CONSTEXPR unsigned __int128
 
 1510       round_error() _GLIBCXX_USE_NOEXCEPT { return 0; }
 
 1512       static _GLIBCXX_USE_CONSTEXPR int min_exponent = 0;
 
 1513       static _GLIBCXX_USE_CONSTEXPR int min_exponent10 = 0;
 
 1514       static _GLIBCXX_USE_CONSTEXPR int max_exponent = 0;
 
 1515       static _GLIBCXX_USE_CONSTEXPR int max_exponent10 = 0;
 
 1517       static _GLIBCXX_USE_CONSTEXPR bool has_infinity = false;
 
 1518       static _GLIBCXX_USE_CONSTEXPR bool has_quiet_NaN = false;
 
 1519       static _GLIBCXX_USE_CONSTEXPR bool has_signaling_NaN = false;
 
 1520       static _GLIBCXX_USE_CONSTEXPR float_denorm_style has_denorm
 
 1522       static _GLIBCXX_USE_CONSTEXPR bool has_denorm_loss = false;
 
 1524       static _GLIBCXX_CONSTEXPR unsigned __int128
 
 1525       infinity() _GLIBCXX_USE_NOEXCEPT
 
 1526       { return static_cast<unsigned __int128>(0); }
 
 1528       static _GLIBCXX_CONSTEXPR unsigned __int128
 
 1529       quiet_NaN() _GLIBCXX_USE_NOEXCEPT
 
 1530       { return static_cast<unsigned __int128>(0); }
 
 1532       static _GLIBCXX_CONSTEXPR unsigned __int128
 
 1533       signaling_NaN() _GLIBCXX_USE_NOEXCEPT
 
 1534       { return static_cast<unsigned __int128>(0); }
 
 1536       static _GLIBCXX_CONSTEXPR unsigned __int128
 
 1537       denorm_min() _GLIBCXX_USE_NOEXCEPT
 
 1538       { return static_cast<unsigned __int128>(0); }
 
 1540       static _GLIBCXX_USE_CONSTEXPR bool is_iec559 = false;
 
 1541       static _GLIBCXX_USE_CONSTEXPR bool is_bounded = true;
 
 1542       static _GLIBCXX_USE_CONSTEXPR bool is_modulo = true;
 
 1544       static _GLIBCXX_USE_CONSTEXPR bool traps = __glibcxx_integral_traps;
 
 1545       static _GLIBCXX_USE_CONSTEXPR bool tinyness_before = false;
 
 1546       static _GLIBCXX_USE_CONSTEXPR float_round_style round_style
 
 1547        = round_toward_zero;
 
 1551   /// numeric_limits<float> specialization.
 
 1553     struct numeric_limits<float>
 
 1555       static _GLIBCXX_USE_CONSTEXPR bool is_specialized = true;
 
 1557       static _GLIBCXX_CONSTEXPR float 
 
 1558       min() _GLIBCXX_USE_NOEXCEPT { return __FLT_MIN__; }
 
 1560       static _GLIBCXX_CONSTEXPR float 
 
 1561       max() _GLIBCXX_USE_NOEXCEPT { return __FLT_MAX__; }
 
 1563 #if __cplusplus >= 201103L
 
 1564       static constexpr float 
 
 1565       lowest() noexcept { return -__FLT_MAX__; }
 
 1568       static _GLIBCXX_USE_CONSTEXPR int digits = __FLT_MANT_DIG__;
 
 1569       static _GLIBCXX_USE_CONSTEXPR int digits10 = __FLT_DIG__;
 
 1570 #if __cplusplus >= 201103L
 
 1571       static constexpr int max_digits10
 
 1572     = __glibcxx_max_digits10 (__FLT_MANT_DIG__);
 
 1574       static _GLIBCXX_USE_CONSTEXPR bool is_signed = true;
 
 1575       static _GLIBCXX_USE_CONSTEXPR bool is_integer = false;
 
 1576       static _GLIBCXX_USE_CONSTEXPR bool is_exact = false;
 
 1577       static _GLIBCXX_USE_CONSTEXPR int radix = __FLT_RADIX__;
 
 1579       static _GLIBCXX_CONSTEXPR float 
 
 1580       epsilon() _GLIBCXX_USE_NOEXCEPT { return __FLT_EPSILON__; }
 
 1582       static _GLIBCXX_CONSTEXPR float 
 
 1583       round_error() _GLIBCXX_USE_NOEXCEPT { return 0.5F; }
 
 1585       static _GLIBCXX_USE_CONSTEXPR int min_exponent = __FLT_MIN_EXP__;
 
 1586       static _GLIBCXX_USE_CONSTEXPR int min_exponent10 = __FLT_MIN_10_EXP__;
 
 1587       static _GLIBCXX_USE_CONSTEXPR int max_exponent = __FLT_MAX_EXP__;
 
 1588       static _GLIBCXX_USE_CONSTEXPR int max_exponent10 = __FLT_MAX_10_EXP__;
 
 1590       static _GLIBCXX_USE_CONSTEXPR bool has_infinity = __FLT_HAS_INFINITY__;
 
 1591       static _GLIBCXX_USE_CONSTEXPR bool has_quiet_NaN = __FLT_HAS_QUIET_NAN__;
 
 1592       static _GLIBCXX_USE_CONSTEXPR bool has_signaling_NaN = has_quiet_NaN;
 
 1593       static _GLIBCXX_USE_CONSTEXPR float_denorm_style has_denorm
 
 1594    = bool(__FLT_HAS_DENORM__) ? denorm_present : denorm_absent;
 
 1595       static _GLIBCXX_USE_CONSTEXPR bool has_denorm_loss 
 
 1596        = __glibcxx_float_has_denorm_loss;
 
 1598       static _GLIBCXX_CONSTEXPR float 
 
 1599       infinity() _GLIBCXX_USE_NOEXCEPT { return __builtin_huge_valf(); }
 
 1601       static _GLIBCXX_CONSTEXPR float 
 
 1602       quiet_NaN() _GLIBCXX_USE_NOEXCEPT { return __builtin_nanf(""); }
 
 1604       static _GLIBCXX_CONSTEXPR float 
 
 1605       signaling_NaN() _GLIBCXX_USE_NOEXCEPT { return __builtin_nansf(""); }
 
 1607       static _GLIBCXX_CONSTEXPR float 
 
 1608       denorm_min() _GLIBCXX_USE_NOEXCEPT { return __FLT_DENORM_MIN__; }
 
 1610       static _GLIBCXX_USE_CONSTEXPR bool is_iec559
 
 1611    = has_infinity && has_quiet_NaN && has_denorm == denorm_present;
 
 1612       static _GLIBCXX_USE_CONSTEXPR bool is_bounded = true;
 
 1613       static _GLIBCXX_USE_CONSTEXPR bool is_modulo = false;
 
 1615       static _GLIBCXX_USE_CONSTEXPR bool traps = __glibcxx_float_traps;
 
 1616       static _GLIBCXX_USE_CONSTEXPR bool tinyness_before 
 
 1617        = __glibcxx_float_tinyness_before;
 
 1618       static _GLIBCXX_USE_CONSTEXPR float_round_style round_style 
 
 1622 #undef __glibcxx_float_has_denorm_loss
 
 1623 #undef __glibcxx_float_traps
 
 1624 #undef __glibcxx_float_tinyness_before
 
 1626   /// numeric_limits<double> specialization.
 
 1628     struct numeric_limits<double>
 
 1630       static _GLIBCXX_USE_CONSTEXPR bool is_specialized = true;
 
 1632       static _GLIBCXX_CONSTEXPR double 
 
 1633       min() _GLIBCXX_USE_NOEXCEPT { return __DBL_MIN__; }
 
 1635       static _GLIBCXX_CONSTEXPR double 
 
 1636       max() _GLIBCXX_USE_NOEXCEPT { return __DBL_MAX__; }
 
 1638 #if __cplusplus >= 201103L
 
 1639       static constexpr double 
 
 1640       lowest() noexcept { return -__DBL_MAX__; }
 
 1643       static _GLIBCXX_USE_CONSTEXPR int digits = __DBL_MANT_DIG__;
 
 1644       static _GLIBCXX_USE_CONSTEXPR int digits10 = __DBL_DIG__;
 
 1645 #if __cplusplus >= 201103L
 
 1646       static constexpr int max_digits10
 
 1647     = __glibcxx_max_digits10 (__DBL_MANT_DIG__);
 
 1649       static _GLIBCXX_USE_CONSTEXPR bool is_signed = true;
 
 1650       static _GLIBCXX_USE_CONSTEXPR bool is_integer = false;
 
 1651       static _GLIBCXX_USE_CONSTEXPR bool is_exact = false;
 
 1652       static _GLIBCXX_USE_CONSTEXPR int radix = __FLT_RADIX__;
 
 1654       static _GLIBCXX_CONSTEXPR double 
 
 1655       epsilon() _GLIBCXX_USE_NOEXCEPT { return __DBL_EPSILON__; }
 
 1657       static _GLIBCXX_CONSTEXPR double 
 
 1658       round_error() _GLIBCXX_USE_NOEXCEPT { return 0.5; }
 
 1660       static _GLIBCXX_USE_CONSTEXPR int min_exponent = __DBL_MIN_EXP__;
 
 1661       static _GLIBCXX_USE_CONSTEXPR int min_exponent10 = __DBL_MIN_10_EXP__;
 
 1662       static _GLIBCXX_USE_CONSTEXPR int max_exponent = __DBL_MAX_EXP__;
 
 1663       static _GLIBCXX_USE_CONSTEXPR int max_exponent10 = __DBL_MAX_10_EXP__;
 
 1665       static _GLIBCXX_USE_CONSTEXPR bool has_infinity = __DBL_HAS_INFINITY__;
 
 1666       static _GLIBCXX_USE_CONSTEXPR bool has_quiet_NaN = __DBL_HAS_QUIET_NAN__;
 
 1667       static _GLIBCXX_USE_CONSTEXPR bool has_signaling_NaN = has_quiet_NaN;
 
 1668       static _GLIBCXX_USE_CONSTEXPR float_denorm_style has_denorm
 
 1669    = bool(__DBL_HAS_DENORM__) ? denorm_present : denorm_absent;
 
 1670       static _GLIBCXX_USE_CONSTEXPR bool has_denorm_loss 
 
 1671         = __glibcxx_double_has_denorm_loss;
 
 1673       static _GLIBCXX_CONSTEXPR double 
 
 1674       infinity() _GLIBCXX_USE_NOEXCEPT { return __builtin_huge_val(); }
 
 1676       static _GLIBCXX_CONSTEXPR double 
 
 1677       quiet_NaN() _GLIBCXX_USE_NOEXCEPT { return __builtin_nan(""); }
 
 1679       static _GLIBCXX_CONSTEXPR double 
 
 1680       signaling_NaN() _GLIBCXX_USE_NOEXCEPT { return __builtin_nans(""); }
 
 1682       static _GLIBCXX_CONSTEXPR double 
 
 1683       denorm_min() _GLIBCXX_USE_NOEXCEPT { return __DBL_DENORM_MIN__; }
 
 1685       static _GLIBCXX_USE_CONSTEXPR bool is_iec559
 
 1686    = has_infinity && has_quiet_NaN && has_denorm == denorm_present;
 
 1687       static _GLIBCXX_USE_CONSTEXPR bool is_bounded = true;
 
 1688       static _GLIBCXX_USE_CONSTEXPR bool is_modulo = false;
 
 1690       static _GLIBCXX_USE_CONSTEXPR bool traps = __glibcxx_double_traps;
 
 1691       static _GLIBCXX_USE_CONSTEXPR bool tinyness_before 
 
 1692        = __glibcxx_double_tinyness_before;
 
 1693       static _GLIBCXX_USE_CONSTEXPR float_round_style round_style 
 
 1697 #undef __glibcxx_double_has_denorm_loss
 
 1698 #undef __glibcxx_double_traps
 
 1699 #undef __glibcxx_double_tinyness_before
 
 1701   /// numeric_limits<long double> specialization.
 
 1703     struct numeric_limits<long double>
 
 1705       static _GLIBCXX_USE_CONSTEXPR bool is_specialized = true;
 
 1707       static _GLIBCXX_CONSTEXPR long double 
 
 1708       min() _GLIBCXX_USE_NOEXCEPT { return __LDBL_MIN__; }
 
 1710       static _GLIBCXX_CONSTEXPR long double 
 
 1711       max() _GLIBCXX_USE_NOEXCEPT { return __LDBL_MAX__; }
 
 1713 #if __cplusplus >= 201103L
 
 1714       static constexpr long double 
 
 1715       lowest() noexcept { return -__LDBL_MAX__; }
 
 1718       static _GLIBCXX_USE_CONSTEXPR int digits = __LDBL_MANT_DIG__;
 
 1719       static _GLIBCXX_USE_CONSTEXPR int digits10 = __LDBL_DIG__;
 
 1720 #if __cplusplus >= 201103L
 
 1721       static _GLIBCXX_USE_CONSTEXPR int max_digits10
 
 1722     = __glibcxx_max_digits10 (__LDBL_MANT_DIG__);
 
 1724       static _GLIBCXX_USE_CONSTEXPR bool is_signed = true;
 
 1725       static _GLIBCXX_USE_CONSTEXPR bool is_integer = false;
 
 1726       static _GLIBCXX_USE_CONSTEXPR bool is_exact = false;
 
 1727       static _GLIBCXX_USE_CONSTEXPR int radix = __FLT_RADIX__;
 
 1729       static _GLIBCXX_CONSTEXPR long double 
 
 1730       epsilon() _GLIBCXX_USE_NOEXCEPT { return __LDBL_EPSILON__; }
 
 1732       static _GLIBCXX_CONSTEXPR long double 
 
 1733       round_error() _GLIBCXX_USE_NOEXCEPT { return 0.5L; }
 
 1735       static _GLIBCXX_USE_CONSTEXPR int min_exponent = __LDBL_MIN_EXP__;
 
 1736       static _GLIBCXX_USE_CONSTEXPR int min_exponent10 = __LDBL_MIN_10_EXP__;
 
 1737       static _GLIBCXX_USE_CONSTEXPR int max_exponent = __LDBL_MAX_EXP__;
 
 1738       static _GLIBCXX_USE_CONSTEXPR int max_exponent10 = __LDBL_MAX_10_EXP__;
 
 1740       static _GLIBCXX_USE_CONSTEXPR bool has_infinity = __LDBL_HAS_INFINITY__;
 
 1741       static _GLIBCXX_USE_CONSTEXPR bool has_quiet_NaN = __LDBL_HAS_QUIET_NAN__;
 
 1742       static _GLIBCXX_USE_CONSTEXPR bool has_signaling_NaN = has_quiet_NaN;
 
 1743       static _GLIBCXX_USE_CONSTEXPR float_denorm_style has_denorm
 
 1744    = bool(__LDBL_HAS_DENORM__) ? denorm_present : denorm_absent;
 
 1745       static _GLIBCXX_USE_CONSTEXPR bool has_denorm_loss
 
 1746    = __glibcxx_long_double_has_denorm_loss;
 
 1748       static _GLIBCXX_CONSTEXPR long double 
 
 1749       infinity() _GLIBCXX_USE_NOEXCEPT { return __builtin_huge_vall(); }
 
 1751       static _GLIBCXX_CONSTEXPR long double 
 
 1752       quiet_NaN() _GLIBCXX_USE_NOEXCEPT { return __builtin_nanl(""); }
 
 1754       static _GLIBCXX_CONSTEXPR long double 
 
 1755       signaling_NaN() _GLIBCXX_USE_NOEXCEPT { return __builtin_nansl(""); }
 
 1757       static _GLIBCXX_CONSTEXPR long double 
 
 1758       denorm_min() _GLIBCXX_USE_NOEXCEPT { return __LDBL_DENORM_MIN__; }
 
 1760       static _GLIBCXX_USE_CONSTEXPR bool is_iec559
 
 1761    = has_infinity && has_quiet_NaN && has_denorm == denorm_present;
 
 1762       static _GLIBCXX_USE_CONSTEXPR bool is_bounded = true;
 
 1763       static _GLIBCXX_USE_CONSTEXPR bool is_modulo = false;
 
 1765       static _GLIBCXX_USE_CONSTEXPR bool traps = __glibcxx_long_double_traps;
 
 1766       static _GLIBCXX_USE_CONSTEXPR bool tinyness_before = 
 
 1767                     __glibcxx_long_double_tinyness_before;
 
 1768       static _GLIBCXX_USE_CONSTEXPR float_round_style round_style = 
 
 1772 #undef __glibcxx_long_double_has_denorm_loss
 
 1773 #undef __glibcxx_long_double_traps
 
 1774 #undef __glibcxx_long_double_tinyness_before
 
 1776 _GLIBCXX_END_NAMESPACE_VERSION
 
 1779 #undef __glibcxx_signed
 
 1780 #undef __glibcxx_min
 
 1781 #undef __glibcxx_max
 
 1782 #undef __glibcxx_digits
 
 1783 #undef __glibcxx_digits10
 
 1784 #undef __glibcxx_max_digits10
 
 1786 #endif // _GLIBCXX_NUMERIC_LIMITS