1    	// The template and inlines for the numeric_limits classes. -*- C++ -*-
2    	
3    	// Copyright (C) 1999-2013 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(T)	((T)(-1) < 0)
129  	
130  	#define __glibcxx_min(T) \
131  	  (__glibcxx_signed (T) ? -__glibcxx_max (T) - 1 : (T)0)
132  	
133  	#define __glibcxx_max(T) \
134  	  (__glibcxx_signed (T) ? \
135  	   (((((T)1 << (__glibcxx_digits (T) - 1)) - 1) << 1) + 1) : ~(T)0)
136  	
137  	#define __glibcxx_digits(T) \
138  	  (sizeof(T) * __CHAR_BIT__ - __glibcxx_signed (T))
139  	
140  	// The fraction 643/2136 approximates log10(2) to 7 significant digits.
141  	#define __glibcxx_digits10(T) \
142  	  (__glibcxx_digits (T) * 643L / 2136)
143  	
144  	#define __glibcxx_max_digits10(T) \
145  	  (2 + (T) * 643L / 2136)
146  	
147  	namespace std _GLIBCXX_VISIBILITY(default)
148  	{
149  	_GLIBCXX_BEGIN_NAMESPACE_VERSION
150  	
151  	  /**
152  	   *  @brief Describes the rounding style for floating-point types.
153  	   *
154  	   *  This is used in the std::numeric_limits class.
155  	  */
156  	  enum float_round_style
157  	  {
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.
163  	  };
164  	
165  	  /**
166  	   *  @brief Describes the denormalization for floating-point types.
167  	   *
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.
170  	  */
171  	  enum float_denorm_style
172  	  {
173  	    /// Indeterminate at compile time whether denormalized values are allowed.
174  	    denorm_indeterminate = -1,
175  	    /// The type does not allow denormalized values.
176  	    denorm_absent        = 0,
177  	    /// The type allows denormalized values.
178  	    denorm_present       = 1
179  	  };
180  	
181  	  /**
182  	   *  @brief Part of std::numeric_limits.
183  	   *
184  	   *  The @c static @c const members are usable as integral constant
185  	   *  expressions.
186  	   *
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.
190  	  */
191  	  struct __numeric_limits_base
192  	  {
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;
196  	
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;
201  	
202  	    /** The number of base 10 digits that can be represented without change. */
203  	    static _GLIBCXX_USE_CONSTEXPR int digits10 = 0;
204  	
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;
209  	#endif
210  	
211  	    /** True if the type is signed.  */
212  	    static _GLIBCXX_USE_CONSTEXPR bool is_signed = false;
213  	
214  	    /** True if the type is integer.  */
215  	    static _GLIBCXX_USE_CONSTEXPR bool is_integer = false;
216  	
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;
221  	
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;
225  	
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;
229  	
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;
233  	
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
236  		number.  */
237  	    static _GLIBCXX_USE_CONSTEXPR int max_exponent = 0;
238  	
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;
242  	
243  	    /** True if the type has a representation for positive infinity.  */
244  	    static _GLIBCXX_USE_CONSTEXPR bool has_infinity = false;
245  	
246  	    /** True if the type has a representation for a quiet (non-signaling)
247  		Not a Number.  */
248  	    static _GLIBCXX_USE_CONSTEXPR bool has_quiet_NaN = false;
249  	
250  	    /** True if the type has a representation for a signaling
251  		Not a Number.  */
252  	    static _GLIBCXX_USE_CONSTEXPR bool has_signaling_NaN = false;
253  	
254  	    /** See std::float_denorm_style for more information.  */
255  	    static _GLIBCXX_USE_CONSTEXPR float_denorm_style has_denorm = denorm_absent;
256  	
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;
260  	
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;
264  	
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;
269  	
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;
278  	
279  	    /** True if trapping is implemented for this type.  */
280  	    static _GLIBCXX_USE_CONSTEXPR bool traps = false;
281  	
282  	    /** True if tininess is detected before rounding.  (see IEC 559)  */
283  	    static _GLIBCXX_USE_CONSTEXPR bool tinyness_before = false;
284  	
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 = 
289  							    round_toward_zero;
290  	  };
291  	
292  	  /**
293  	   *  @brief Properties of fundamental types.
294  	   *
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.
299  	   *
300  	   *  _GLIBCXX_RESOLVE_LIB_DEFECTS:  DRs 201 and 184 (hi Gaby!) are
301  	   *  noted, but not incorporated in this documented (yet).
302  	  */
303  	  template<typename _Tp>
304  	    struct numeric_limits : public __numeric_limits_base
305  	    {
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(); }
310  	
311  	      /** The maximum finite value.  */
312  	      static _GLIBCXX_CONSTEXPR _Tp
313  	      max() _GLIBCXX_USE_NOEXCEPT { return _Tp(); }
314  	
315  	#if __cplusplus >= 201103L
316  	      /** A finite value x such that there is no other finite value y
317  	       *  where y < x.  */
318  	      static constexpr _Tp
319  	      lowest() noexcept { return _Tp(); }
320  	#endif
321  	
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(); }
326  	
327  	      /** The maximum rounding error measurement (see LIA-1).  */
328  	      static _GLIBCXX_CONSTEXPR _Tp
329  	      round_error() _GLIBCXX_USE_NOEXCEPT { return _Tp(); }
330  	
331  	      /** The representation of positive infinity, if @c has_infinity.  */
332  	      static _GLIBCXX_CONSTEXPR _Tp
333  	      infinity() _GLIBCXX_USE_NOEXCEPT { return _Tp(); }
334  	
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(); }
339  	
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(); }
344  	
345  	      /** The minimum positive denormalized value.  For types where
346  		  @c has_denorm is false, this is the minimum positive normalized
347  		  value.  */
348  	      static _GLIBCXX_CONSTEXPR _Tp
349  	      denorm_min() _GLIBCXX_USE_NOEXCEPT { return _Tp(); }
350  	    };
351  	
352  	#if __cplusplus >= 201103L
353  	  template<typename _Tp>
354  	    struct numeric_limits<const _Tp>
355  	    : public numeric_limits<_Tp> { };
356  	
357  	  template<typename _Tp>
358  	    struct numeric_limits<volatile _Tp>
359  	    : public numeric_limits<_Tp> { };
360  	
361  	  template<typename _Tp>
362  	    struct numeric_limits<const volatile _Tp>
363  	    : public numeric_limits<_Tp> { };
364  	#endif
365  	
366  	  // Now there follow 16 explicit specializations.  Yes, 16.  Make sure
367  	  // you get the count right. (18 in c++0x mode)
368  	
369  	  /// numeric_limits<bool> specialization.
370  	  template<>
371  	    struct numeric_limits<bool>
372  	    {
373  	      static _GLIBCXX_USE_CONSTEXPR bool is_specialized = true;
374  	
375  	      static _GLIBCXX_CONSTEXPR bool 
376  	      min() _GLIBCXX_USE_NOEXCEPT { return false; }
377  	
378  	      static _GLIBCXX_CONSTEXPR bool 
379  	      max() _GLIBCXX_USE_NOEXCEPT { return true; }
380  	
381  	#if __cplusplus >= 201103L
382  	      static constexpr bool
383  	      lowest() noexcept { return min(); }
384  	#endif
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;
389  	#endif
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;
394  	
395  	      static _GLIBCXX_CONSTEXPR bool 
396  	      epsilon() _GLIBCXX_USE_NOEXCEPT { return false; }
397  	
398  	      static _GLIBCXX_CONSTEXPR bool 
399  	      round_error() _GLIBCXX_USE_NOEXCEPT { return false; }
400  	
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;
405  	
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 
410  	       = denorm_absent;
411  	      static _GLIBCXX_USE_CONSTEXPR bool has_denorm_loss = false;
412  	
413  	      static _GLIBCXX_CONSTEXPR bool 
414  	      infinity() _GLIBCXX_USE_NOEXCEPT { return false; }
415  	
416  	      static _GLIBCXX_CONSTEXPR bool 
417  	      quiet_NaN() _GLIBCXX_USE_NOEXCEPT { return false; }
418  	
419  	      static _GLIBCXX_CONSTEXPR bool 
420  	      signaling_NaN() _GLIBCXX_USE_NOEXCEPT { return false; }
421  	
422  	      static _GLIBCXX_CONSTEXPR bool 
423  	      denorm_min() _GLIBCXX_USE_NOEXCEPT { return false; }
424  	
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;
428  	
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 
435  	       = round_toward_zero;
436  	    };
437  	
438  	  /// numeric_limits<char> specialization.
439  	  template<>
440  	    struct numeric_limits<char>
441  	    {
442  	      static _GLIBCXX_USE_CONSTEXPR bool is_specialized = true;
443  	
444  	      static _GLIBCXX_CONSTEXPR char 
445  	      min() _GLIBCXX_USE_NOEXCEPT { return __glibcxx_min(char); }
446  	
447  	      static _GLIBCXX_CONSTEXPR char 
448  	      max() _GLIBCXX_USE_NOEXCEPT { return __glibcxx_max(char); }
449  	
450  	#if __cplusplus >= 201103L
451  	      static constexpr char 
452  	      lowest() noexcept { return min(); }
453  	#endif
454  	
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;
459  	#endif
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;
464  	
465  	      static _GLIBCXX_CONSTEXPR char 
466  	      epsilon() _GLIBCXX_USE_NOEXCEPT { return 0; }
467  	
468  	      static _GLIBCXX_CONSTEXPR char 
469  	      round_error() _GLIBCXX_USE_NOEXCEPT { return 0; }
470  	
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;
475  	
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 
480  	       = denorm_absent;
481  	      static _GLIBCXX_USE_CONSTEXPR bool has_denorm_loss = false;
482  	
483  	      static _GLIBCXX_CONSTEXPR 
484  	      char infinity() _GLIBCXX_USE_NOEXCEPT { return char(); }
485  	
486  	      static _GLIBCXX_CONSTEXPR char 
487  	      quiet_NaN() _GLIBCXX_USE_NOEXCEPT { return char(); }
488  	
489  	      static _GLIBCXX_CONSTEXPR char 
490  	      signaling_NaN() _GLIBCXX_USE_NOEXCEPT { return char(); }
491  	
492  	      static _GLIBCXX_CONSTEXPR char 
493  	      denorm_min() _GLIBCXX_USE_NOEXCEPT { return static_cast<char>(0); }
494  	
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;
498  	
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 
502  	       = round_toward_zero;
503  	    };
504  	
505  	  /// numeric_limits<signed char> specialization.
506  	  template<>
507  	    struct numeric_limits<signed char>
508  	    {
509  	      static _GLIBCXX_USE_CONSTEXPR bool is_specialized = true;
510  	
511  	      static _GLIBCXX_CONSTEXPR signed char 
512  	      min() _GLIBCXX_USE_NOEXCEPT { return -__SCHAR_MAX__ - 1; }
513  	
514  	      static _GLIBCXX_CONSTEXPR signed char 
515  	      max() _GLIBCXX_USE_NOEXCEPT { return __SCHAR_MAX__; }
516  	
517  	#if __cplusplus >= 201103L
518  	      static constexpr signed char 
519  	      lowest() noexcept { return min(); }
520  	#endif
521  	
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;
527  	#endif
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;
532  	
533  	      static _GLIBCXX_CONSTEXPR signed char 
534  	      epsilon() _GLIBCXX_USE_NOEXCEPT { return 0; }
535  	
536  	      static _GLIBCXX_CONSTEXPR signed char 
537  	      round_error() _GLIBCXX_USE_NOEXCEPT { return 0; }
538  	
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;
543  	
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 
548  	       = denorm_absent;
549  	      static _GLIBCXX_USE_CONSTEXPR bool has_denorm_loss = false;
550  	
551  	      static _GLIBCXX_CONSTEXPR signed char 
552  	      infinity() _GLIBCXX_USE_NOEXCEPT { return static_cast<signed char>(0); }
553  	
554  	      static _GLIBCXX_CONSTEXPR signed char 
555  	      quiet_NaN() _GLIBCXX_USE_NOEXCEPT { return static_cast<signed char>(0); }
556  	
557  	      static _GLIBCXX_CONSTEXPR signed char 
558  	      signaling_NaN() _GLIBCXX_USE_NOEXCEPT
559  	      { return static_cast<signed char>(0); }
560  	
561  	      static _GLIBCXX_CONSTEXPR signed char 
562  	      denorm_min() _GLIBCXX_USE_NOEXCEPT
563  	      { return static_cast<signed char>(0); }
564  	
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;
568  	
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 
572  	       = round_toward_zero;
573  	    };
574  	
575  	  /// numeric_limits<unsigned char> specialization.
576  	  template<>
577  	    struct numeric_limits<unsigned char>
578  	    {
579  	      static _GLIBCXX_USE_CONSTEXPR bool is_specialized = true;
580  	
581  	      static _GLIBCXX_CONSTEXPR unsigned char 
582  	      min() _GLIBCXX_USE_NOEXCEPT { return 0; }
583  	
584  	      static _GLIBCXX_CONSTEXPR unsigned char 
585  	      max() _GLIBCXX_USE_NOEXCEPT { return __SCHAR_MAX__ * 2U + 1; }
586  	
587  	#if __cplusplus >= 201103L
588  	      static constexpr unsigned char 
589  	      lowest() noexcept { return min(); }
590  	#endif
591  	
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;
598  	#endif
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;
603  	
604  	      static _GLIBCXX_CONSTEXPR unsigned char 
605  	      epsilon() _GLIBCXX_USE_NOEXCEPT { return 0; }
606  	
607  	      static _GLIBCXX_CONSTEXPR unsigned char 
608  	      round_error() _GLIBCXX_USE_NOEXCEPT { return 0; }
609  	
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;
614  	
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 
619  	       = denorm_absent;
620  	      static _GLIBCXX_USE_CONSTEXPR bool has_denorm_loss = false;
621  	
622  	      static _GLIBCXX_CONSTEXPR unsigned char 
623  	      infinity() _GLIBCXX_USE_NOEXCEPT
624  	      { return static_cast<unsigned char>(0); }
625  	
626  	      static _GLIBCXX_CONSTEXPR unsigned char 
627  	      quiet_NaN() _GLIBCXX_USE_NOEXCEPT
628  	      { return static_cast<unsigned char>(0); }
629  	
630  	      static _GLIBCXX_CONSTEXPR unsigned char 
631  	      signaling_NaN() _GLIBCXX_USE_NOEXCEPT
632  	      { return static_cast<unsigned char>(0); }
633  	
634  	      static _GLIBCXX_CONSTEXPR unsigned char 
635  	      denorm_min() _GLIBCXX_USE_NOEXCEPT
636  	      { return static_cast<unsigned char>(0); }
637  	
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;
641  	
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 
645  	       = round_toward_zero;
646  	    };
647  	
648  	  /// numeric_limits<wchar_t> specialization.
649  	  template<>
650  	    struct numeric_limits<wchar_t>
651  	    {
652  	      static _GLIBCXX_USE_CONSTEXPR bool is_specialized = true;
653  	
654  	      static _GLIBCXX_CONSTEXPR wchar_t 
655  	      min() _GLIBCXX_USE_NOEXCEPT { return __glibcxx_min (wchar_t); }
656  	
657  	      static _GLIBCXX_CONSTEXPR wchar_t 
658  	      max() _GLIBCXX_USE_NOEXCEPT { return __glibcxx_max (wchar_t); }
659  	
660  	#if __cplusplus >= 201103L
661  	      static constexpr wchar_t
662  	      lowest() noexcept { return min(); }
663  	#endif
664  	
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;
670  	#endif
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;
675  	
676  	      static _GLIBCXX_CONSTEXPR wchar_t 
677  	      epsilon() _GLIBCXX_USE_NOEXCEPT { return 0; }
678  	
679  	      static _GLIBCXX_CONSTEXPR wchar_t 
680  	      round_error() _GLIBCXX_USE_NOEXCEPT { return 0; }
681  	
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;
686  	
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 
691  	       = denorm_absent;
692  	      static _GLIBCXX_USE_CONSTEXPR bool has_denorm_loss = false;
693  	
694  	      static _GLIBCXX_CONSTEXPR wchar_t 
695  	      infinity() _GLIBCXX_USE_NOEXCEPT { return wchar_t(); }
696  	
697  	      static _GLIBCXX_CONSTEXPR wchar_t 
698  	      quiet_NaN() _GLIBCXX_USE_NOEXCEPT { return wchar_t(); }
699  	
700  	      static _GLIBCXX_CONSTEXPR wchar_t 
701  	      signaling_NaN() _GLIBCXX_USE_NOEXCEPT { return wchar_t(); }
702  	
703  	      static _GLIBCXX_CONSTEXPR wchar_t 
704  	      denorm_min() _GLIBCXX_USE_NOEXCEPT { return wchar_t(); }
705  	
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;
709  	
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 
713  	       = round_toward_zero;
714  	    };
715  	
716  	#if __cplusplus >= 201103L
717  	  /// numeric_limits<char16_t> specialization.
718  	  template<>
719  	    struct numeric_limits<char16_t>
720  	    {
721  	      static constexpr bool is_specialized = true;
722  	
723  	      static constexpr char16_t 
724  	      min() noexcept { return __glibcxx_min (char16_t); }
725  	
726  	      static constexpr char16_t 
727  	      max() noexcept { return __glibcxx_max (char16_t); }
728  	
729  	      static constexpr char16_t 
730  	      lowest() noexcept { return min(); }
731  	
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;
739  	
740  	      static constexpr char16_t 
741  	      epsilon() noexcept { return 0; }
742  	
743  	      static constexpr char16_t 
744  	      round_error() noexcept { return 0; }
745  	
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;
750  	
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;
756  	
757  	      static constexpr char16_t 
758  	      infinity() noexcept { return char16_t(); }
759  	
760  	      static constexpr char16_t 
761  	      quiet_NaN() noexcept { return char16_t(); }
762  	
763  	      static constexpr char16_t 
764  	      signaling_NaN() noexcept { return char16_t(); }
765  	
766  	      static constexpr char16_t 
767  	      denorm_min() noexcept { return char16_t(); }
768  	
769  	      static constexpr bool is_iec559 = false;
770  	      static constexpr bool is_bounded = true;
771  	      static constexpr bool is_modulo = !is_signed;
772  	
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;
776  	    };
777  	
778  	  /// numeric_limits<char32_t> specialization.
779  	  template<>
780  	    struct numeric_limits<char32_t>
781  	    {
782  	      static constexpr bool is_specialized = true;
783  	
784  	      static constexpr char32_t 
785  	      min() noexcept { return __glibcxx_min (char32_t); }
786  	
787  	      static constexpr char32_t 
788  	      max() noexcept { return __glibcxx_max (char32_t); }
789  	
790  	      static constexpr char32_t 
791  	      lowest() noexcept { return min(); }
792  	
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;
800  	
801  	      static constexpr char32_t 
802  	      epsilon() noexcept { return 0; }
803  	
804  	      static constexpr char32_t 
805  	      round_error() noexcept { return 0; }
806  	
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;
811  	
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;
817  	
818  	      static constexpr char32_t 
819  	      infinity() noexcept { return char32_t(); }
820  	
821  	      static constexpr char32_t 
822  	      quiet_NaN() noexcept { return char32_t(); }
823  	
824  	      static constexpr char32_t 
825  	      signaling_NaN() noexcept { return char32_t(); }
826  	
827  	      static constexpr char32_t 
828  	      denorm_min() noexcept { return char32_t(); }
829  	
830  	      static constexpr bool is_iec559 = false;
831  	      static constexpr bool is_bounded = true;
832  	      static constexpr bool is_modulo = !is_signed;
833  	
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;
837  	    };
838  	#endif
839  	
840  	  /// numeric_limits<short> specialization.
841  	  template<>
842  	    struct numeric_limits<short>
843  	    {
844  	      static _GLIBCXX_USE_CONSTEXPR bool is_specialized = true;
845  	
846  	      static _GLIBCXX_CONSTEXPR short 
847  	      min() _GLIBCXX_USE_NOEXCEPT { return -__SHRT_MAX__ - 1; }
848  	
849  	      static _GLIBCXX_CONSTEXPR short 
850  	      max() _GLIBCXX_USE_NOEXCEPT { return __SHRT_MAX__; }
851  	
852  	#if __cplusplus >= 201103L
853  	      static constexpr short 
854  	      lowest() noexcept { return min(); }
855  	#endif
856  	
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;
861  	#endif
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;
866  	
867  	      static _GLIBCXX_CONSTEXPR short 
868  	      epsilon() _GLIBCXX_USE_NOEXCEPT { return 0; }
869  	
870  	      static _GLIBCXX_CONSTEXPR short 
871  	      round_error() _GLIBCXX_USE_NOEXCEPT { return 0; }
872  	
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;
877  	
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 
882  	       = denorm_absent;
883  	      static _GLIBCXX_USE_CONSTEXPR bool has_denorm_loss = false;
884  	
885  	      static _GLIBCXX_CONSTEXPR short 
886  	      infinity() _GLIBCXX_USE_NOEXCEPT { return short(); }
887  	
888  	      static _GLIBCXX_CONSTEXPR short 
889  	      quiet_NaN() _GLIBCXX_USE_NOEXCEPT { return short(); }
890  	
891  	      static _GLIBCXX_CONSTEXPR short 
892  	      signaling_NaN() _GLIBCXX_USE_NOEXCEPT { return short(); }
893  	
894  	      static _GLIBCXX_CONSTEXPR short 
895  	      denorm_min() _GLIBCXX_USE_NOEXCEPT { return short(); }
896  	
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;
900  	
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 
904  	       = round_toward_zero;
905  	    };
906  	
907  	  /// numeric_limits<unsigned short> specialization.
908  	  template<>
909  	    struct numeric_limits<unsigned short>
910  	    {
911  	      static _GLIBCXX_USE_CONSTEXPR bool is_specialized = true;
912  	
913  	      static _GLIBCXX_CONSTEXPR unsigned short 
914  	      min() _GLIBCXX_USE_NOEXCEPT { return 0; }
915  	
916  	      static _GLIBCXX_CONSTEXPR unsigned short 
917  	      max() _GLIBCXX_USE_NOEXCEPT { return __SHRT_MAX__ * 2U + 1; }
918  	
919  	#if __cplusplus >= 201103L
920  	      static constexpr unsigned short 
921  	      lowest() noexcept { return min(); }
922  	#endif
923  	
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;
930  	#endif
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;
935  	
936  	      static _GLIBCXX_CONSTEXPR unsigned short 
937  	      epsilon() _GLIBCXX_USE_NOEXCEPT { return 0; }
938  	
939  	      static _GLIBCXX_CONSTEXPR unsigned short 
940  	      round_error() _GLIBCXX_USE_NOEXCEPT { return 0; }
941  	
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;
946  	
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 
951  	       = denorm_absent;
952  	      static _GLIBCXX_USE_CONSTEXPR bool has_denorm_loss = false;
953  	
954  	      static _GLIBCXX_CONSTEXPR unsigned short 
955  	      infinity() _GLIBCXX_USE_NOEXCEPT
956  	      { return static_cast<unsigned short>(0); }
957  	
958  	      static _GLIBCXX_CONSTEXPR unsigned short 
959  	      quiet_NaN() _GLIBCXX_USE_NOEXCEPT
960  	      { return static_cast<unsigned short>(0); }
961  	
962  	      static _GLIBCXX_CONSTEXPR unsigned short 
963  	      signaling_NaN() _GLIBCXX_USE_NOEXCEPT
964  	      { return static_cast<unsigned short>(0); }
965  	
966  	      static _GLIBCXX_CONSTEXPR unsigned short 
967  	      denorm_min() _GLIBCXX_USE_NOEXCEPT
968  	      { return static_cast<unsigned short>(0); }
969  	
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;
973  	
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 
977  	       = round_toward_zero;
978  	    };
979  	
980  	  /// numeric_limits<int> specialization.
981  	  template<>
982  	    struct numeric_limits<int>
983  	    {
984  	      static _GLIBCXX_USE_CONSTEXPR bool is_specialized = true;
985  	
986  	      static _GLIBCXX_CONSTEXPR int 
987  	      min() _GLIBCXX_USE_NOEXCEPT { return -__INT_MAX__ - 1; }
988  	
989  	      static _GLIBCXX_CONSTEXPR int 
990  	      max() _GLIBCXX_USE_NOEXCEPT { return __INT_MAX__; }
991  	
992  	#if __cplusplus >= 201103L
993  	      static constexpr int 
994  	      lowest() noexcept { return min(); }
995  	#endif
996  	
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;
1001 	#endif
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;
1006 	
1007 	      static _GLIBCXX_CONSTEXPR int 
1008 	      epsilon() _GLIBCXX_USE_NOEXCEPT { return 0; }
1009 	
1010 	      static _GLIBCXX_CONSTEXPR int 
1011 	      round_error() _GLIBCXX_USE_NOEXCEPT { return 0; }
1012 	
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;
1017 	
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 
1022 	       = denorm_absent;
1023 	      static _GLIBCXX_USE_CONSTEXPR bool has_denorm_loss = false;
1024 	
1025 	      static _GLIBCXX_CONSTEXPR int 
1026 	      infinity() _GLIBCXX_USE_NOEXCEPT { return static_cast<int>(0); }
1027 	
1028 	      static _GLIBCXX_CONSTEXPR int 
1029 	      quiet_NaN() _GLIBCXX_USE_NOEXCEPT { return static_cast<int>(0); }
1030 	
1031 	      static _GLIBCXX_CONSTEXPR int 
1032 	      signaling_NaN() _GLIBCXX_USE_NOEXCEPT { return static_cast<int>(0); }
1033 	
1034 	      static _GLIBCXX_CONSTEXPR int 
1035 	      denorm_min() _GLIBCXX_USE_NOEXCEPT { return static_cast<int>(0); }
1036 	
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;
1040 	
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;
1045 	    };
1046 	
1047 	  /// numeric_limits<unsigned int> specialization.
1048 	  template<>
1049 	    struct numeric_limits<unsigned int>
1050 	    {
1051 	      static _GLIBCXX_USE_CONSTEXPR bool is_specialized = true;
1052 	
1053 	      static _GLIBCXX_CONSTEXPR unsigned int 
1054 	      min() _GLIBCXX_USE_NOEXCEPT { return 0; }
1055 	
1056 	      static _GLIBCXX_CONSTEXPR unsigned int 
1057 	      max() _GLIBCXX_USE_NOEXCEPT { return __INT_MAX__ * 2U + 1; }
1058 	
1059 	#if __cplusplus >= 201103L
1060 	      static constexpr unsigned int 
1061 	      lowest() noexcept { return min(); }
1062 	#endif
1063 	
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;
1070 	#endif
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;
1075 	
1076 	      static _GLIBCXX_CONSTEXPR unsigned int 
1077 	      epsilon() _GLIBCXX_USE_NOEXCEPT { return 0; }
1078 	
1079 	      static _GLIBCXX_CONSTEXPR unsigned int 
1080 	      round_error() _GLIBCXX_USE_NOEXCEPT { return 0; }
1081 	
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;
1086 	
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 
1091 	       = denorm_absent;
1092 	      static _GLIBCXX_USE_CONSTEXPR bool has_denorm_loss = false;
1093 	
1094 	      static _GLIBCXX_CONSTEXPR unsigned int 
1095 	      infinity() _GLIBCXX_USE_NOEXCEPT { return static_cast<unsigned int>(0); }
1096 	
1097 	      static _GLIBCXX_CONSTEXPR unsigned int 
1098 	      quiet_NaN() _GLIBCXX_USE_NOEXCEPT
1099 	      { return static_cast<unsigned int>(0); }
1100 	
1101 	      static _GLIBCXX_CONSTEXPR unsigned int 
1102 	      signaling_NaN() _GLIBCXX_USE_NOEXCEPT
1103 	      { return static_cast<unsigned int>(0); }
1104 	
1105 	      static _GLIBCXX_CONSTEXPR unsigned int 
1106 	      denorm_min() _GLIBCXX_USE_NOEXCEPT
1107 	      { return static_cast<unsigned int>(0); }
1108 	
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;
1112 	
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;
1117 	    };
1118 	
1119 	  /// numeric_limits<long> specialization.
1120 	  template<>
1121 	    struct numeric_limits<long>
1122 	    {
1123 	      static _GLIBCXX_USE_CONSTEXPR bool is_specialized = true;
1124 	
1125 	      static _GLIBCXX_CONSTEXPR long
1126 	      min() _GLIBCXX_USE_NOEXCEPT { return -__LONG_MAX__ - 1; }
1127 	
1128 	      static _GLIBCXX_CONSTEXPR long 
1129 	      max() _GLIBCXX_USE_NOEXCEPT { return __LONG_MAX__; }
1130 	
1131 	#if __cplusplus >= 201103L
1132 	      static constexpr long 
1133 	      lowest() noexcept { return min(); }
1134 	#endif
1135 	
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;
1140 	#endif
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;
1145 	
1146 	      static _GLIBCXX_CONSTEXPR long 
1147 	      epsilon() _GLIBCXX_USE_NOEXCEPT { return 0; }
1148 	
1149 	      static _GLIBCXX_CONSTEXPR long 
1150 	      round_error() _GLIBCXX_USE_NOEXCEPT { return 0; }
1151 	
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;
1156 	
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 
1161 	       = denorm_absent;
1162 	      static _GLIBCXX_USE_CONSTEXPR bool has_denorm_loss = false;
1163 	
1164 	      static _GLIBCXX_CONSTEXPR long 
1165 	      infinity() _GLIBCXX_USE_NOEXCEPT { return static_cast<long>(0); }
1166 	
1167 	      static _GLIBCXX_CONSTEXPR long 
1168 	      quiet_NaN() _GLIBCXX_USE_NOEXCEPT { return static_cast<long>(0); }
1169 	
1170 	      static _GLIBCXX_CONSTEXPR long 
1171 	      signaling_NaN() _GLIBCXX_USE_NOEXCEPT { return static_cast<long>(0); }
1172 	
1173 	      static _GLIBCXX_CONSTEXPR long 
1174 	      denorm_min() _GLIBCXX_USE_NOEXCEPT { return static_cast<long>(0); }
1175 	
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;
1179 	
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;
1184 	    };
1185 	
1186 	  /// numeric_limits<unsigned long> specialization.
1187 	  template<>
1188 	    struct numeric_limits<unsigned long>
1189 	    {
1190 	      static _GLIBCXX_USE_CONSTEXPR bool is_specialized = true;
1191 	
1192 	      static _GLIBCXX_CONSTEXPR unsigned long 
1193 	      min() _GLIBCXX_USE_NOEXCEPT { return 0; }
1194 	
1195 	      static _GLIBCXX_CONSTEXPR unsigned long 
1196 	      max() _GLIBCXX_USE_NOEXCEPT { return __LONG_MAX__ * 2UL + 1; }
1197 	
1198 	#if __cplusplus >= 201103L
1199 	      static constexpr unsigned long 
1200 	      lowest() noexcept { return min(); }
1201 	#endif
1202 	
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;
1209 	#endif
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;
1214 	
1215 	      static _GLIBCXX_CONSTEXPR unsigned long 
1216 	      epsilon() _GLIBCXX_USE_NOEXCEPT { return 0; }
1217 	
1218 	      static _GLIBCXX_CONSTEXPR unsigned long 
1219 	      round_error() _GLIBCXX_USE_NOEXCEPT { return 0; }
1220 	
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;
1225 	
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 
1230 	       = denorm_absent;
1231 	      static _GLIBCXX_USE_CONSTEXPR bool has_denorm_loss = false;
1232 	
1233 	      static _GLIBCXX_CONSTEXPR unsigned long 
1234 	      infinity() _GLIBCXX_USE_NOEXCEPT
1235 	      { return static_cast<unsigned long>(0); }
1236 	
1237 	      static _GLIBCXX_CONSTEXPR unsigned long 
1238 	      quiet_NaN() _GLIBCXX_USE_NOEXCEPT
1239 	      { return static_cast<unsigned long>(0); }
1240 	
1241 	      static _GLIBCXX_CONSTEXPR unsigned long 
1242 	      signaling_NaN() _GLIBCXX_USE_NOEXCEPT
1243 	      { return static_cast<unsigned long>(0); }
1244 	
1245 	      static _GLIBCXX_CONSTEXPR unsigned long 
1246 	      denorm_min() _GLIBCXX_USE_NOEXCEPT
1247 	      { return static_cast<unsigned long>(0); }
1248 	
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;
1252 	
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;
1257 	    };
1258 	
1259 	  /// numeric_limits<long long> specialization.
1260 	  template<>
1261 	    struct numeric_limits<long long>
1262 	    {
1263 	      static _GLIBCXX_USE_CONSTEXPR bool is_specialized = true;
1264 	
1265 	      static _GLIBCXX_CONSTEXPR long long 
1266 	      min() _GLIBCXX_USE_NOEXCEPT { return -__LONG_LONG_MAX__ - 1; }
1267 	
1268 	      static _GLIBCXX_CONSTEXPR long long 
1269 	      max() _GLIBCXX_USE_NOEXCEPT { return __LONG_LONG_MAX__; }
1270 	
1271 	#if __cplusplus >= 201103L
1272 	      static constexpr long long 
1273 	      lowest() noexcept { return min(); }
1274 	#endif
1275 	
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;
1282 	#endif
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;
1287 	
1288 	      static _GLIBCXX_CONSTEXPR long long 
1289 	      epsilon() _GLIBCXX_USE_NOEXCEPT { return 0; }
1290 	
1291 	      static _GLIBCXX_CONSTEXPR long long 
1292 	      round_error() _GLIBCXX_USE_NOEXCEPT { return 0; }
1293 	
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;
1298 	
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 
1303 	       = denorm_absent;
1304 	      static _GLIBCXX_USE_CONSTEXPR bool has_denorm_loss = false;
1305 	
1306 	      static _GLIBCXX_CONSTEXPR long long 
1307 	      infinity() _GLIBCXX_USE_NOEXCEPT { return static_cast<long long>(0); }
1308 	
1309 	      static _GLIBCXX_CONSTEXPR long long 
1310 	      quiet_NaN() _GLIBCXX_USE_NOEXCEPT { return static_cast<long long>(0); }
1311 	
1312 	      static _GLIBCXX_CONSTEXPR long long 
1313 	      signaling_NaN() _GLIBCXX_USE_NOEXCEPT
1314 	      { return static_cast<long long>(0); }
1315 	
1316 	      static _GLIBCXX_CONSTEXPR long long 
1317 	      denorm_min() _GLIBCXX_USE_NOEXCEPT { return static_cast<long long>(0); }
1318 	
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;
1322 	
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;
1327 	    };
1328 	
1329 	  /// numeric_limits<unsigned long long> specialization.
1330 	  template<>
1331 	    struct numeric_limits<unsigned long long>
1332 	    {
1333 	      static _GLIBCXX_USE_CONSTEXPR bool is_specialized = true;
1334 	
1335 	      static _GLIBCXX_CONSTEXPR unsigned long long 
1336 	      min() _GLIBCXX_USE_NOEXCEPT { return 0; }
1337 	
1338 	      static _GLIBCXX_CONSTEXPR unsigned long long 
1339 	      max() _GLIBCXX_USE_NOEXCEPT { return __LONG_LONG_MAX__ * 2ULL + 1; }
1340 	
1341 	#if __cplusplus >= 201103L
1342 	      static constexpr unsigned long long 
1343 	      lowest() noexcept { return min(); }
1344 	#endif
1345 	
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;
1352 	#endif
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;
1357 	
1358 	      static _GLIBCXX_CONSTEXPR unsigned long long 
1359 	      epsilon() _GLIBCXX_USE_NOEXCEPT { return 0; }
1360 	
1361 	      static _GLIBCXX_CONSTEXPR unsigned long long 
1362 	      round_error() _GLIBCXX_USE_NOEXCEPT { return 0; }
1363 	
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;
1368 	
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 
1373 	       = denorm_absent;
1374 	      static _GLIBCXX_USE_CONSTEXPR bool has_denorm_loss = false;
1375 	
1376 	      static _GLIBCXX_CONSTEXPR unsigned long long 
1377 	      infinity() _GLIBCXX_USE_NOEXCEPT
1378 	      { return static_cast<unsigned long long>(0); }
1379 	
1380 	      static _GLIBCXX_CONSTEXPR unsigned long long 
1381 	      quiet_NaN() _GLIBCXX_USE_NOEXCEPT
1382 	      { return static_cast<unsigned long long>(0); }
1383 	
1384 	      static _GLIBCXX_CONSTEXPR unsigned long long 
1385 	      signaling_NaN() _GLIBCXX_USE_NOEXCEPT
1386 	      { return static_cast<unsigned long long>(0); }
1387 	
1388 	      static _GLIBCXX_CONSTEXPR unsigned long long 
1389 	      denorm_min() _GLIBCXX_USE_NOEXCEPT
1390 	      { return static_cast<unsigned long long>(0); }
1391 	
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;
1395 	
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;
1400 	    };
1401 	
1402 	#if !defined(__STRICT_ANSI__) && defined(_GLIBCXX_USE_INT128)
1403 	  /// numeric_limits<__int128> specialization.
1404 	  template<>
1405 	    struct numeric_limits<__int128>
1406 	    {
1407 	      static _GLIBCXX_USE_CONSTEXPR bool is_specialized = true;
1408 	
1409 	      static _GLIBCXX_CONSTEXPR __int128
1410 	      min() _GLIBCXX_USE_NOEXCEPT { return __glibcxx_min (__int128); }
1411 	
1412 	      static _GLIBCXX_CONSTEXPR __int128
1413 	      max() _GLIBCXX_USE_NOEXCEPT { return __glibcxx_max (__int128); }
1414 	
1415 	#if __cplusplus >= 201103L
1416 	      static constexpr __int128
1417 	      lowest() noexcept { return min(); }
1418 	#endif
1419 	
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;
1426 	#endif
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;
1431 	
1432 	      static _GLIBCXX_CONSTEXPR __int128
1433 	      epsilon() _GLIBCXX_USE_NOEXCEPT { return 0; }
1434 	
1435 	      static _GLIBCXX_CONSTEXPR __int128
1436 	      round_error() _GLIBCXX_USE_NOEXCEPT { return 0; }
1437 	
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;
1442 	
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
1447 	       = denorm_absent;
1448 	      static _GLIBCXX_USE_CONSTEXPR bool has_denorm_loss = false;
1449 	
1450 	      static _GLIBCXX_CONSTEXPR __int128
1451 	      infinity() _GLIBCXX_USE_NOEXCEPT
1452 	      { return static_cast<__int128>(0); }
1453 	
1454 	      static _GLIBCXX_CONSTEXPR __int128
1455 	      quiet_NaN() _GLIBCXX_USE_NOEXCEPT
1456 	      { return static_cast<__int128>(0); }
1457 	      
1458 	      static _GLIBCXX_CONSTEXPR __int128
1459 	      signaling_NaN() _GLIBCXX_USE_NOEXCEPT
1460 	      { return static_cast<__int128>(0); }
1461 	      
1462 	      static _GLIBCXX_CONSTEXPR __int128
1463 	      denorm_min() _GLIBCXX_USE_NOEXCEPT
1464 	      { return static_cast<__int128>(0); }
1465 	
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;
1469 	
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;
1475 	    };
1476 	
1477 	  /// numeric_limits<unsigned __int128> specialization.
1478 	  template<>
1479 	    struct numeric_limits<unsigned __int128>
1480 	    {
1481 	      static _GLIBCXX_USE_CONSTEXPR bool is_specialized = true;
1482 	
1483 	      static _GLIBCXX_CONSTEXPR unsigned __int128
1484 	      min() _GLIBCXX_USE_NOEXCEPT { return 0; }
1485 	
1486 	      static _GLIBCXX_CONSTEXPR unsigned __int128
1487 	      max() _GLIBCXX_USE_NOEXCEPT { return __glibcxx_max (unsigned __int128); }
1488 	
1489 	#if __cplusplus >= 201103L
1490 	      static constexpr unsigned __int128
1491 	      lowest() noexcept { return min(); }
1492 	#endif
1493 	
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;
1500 	#endif
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;
1505 	
1506 	      static _GLIBCXX_CONSTEXPR unsigned __int128
1507 	      epsilon() _GLIBCXX_USE_NOEXCEPT { return 0; }
1508 	
1509 	      static _GLIBCXX_CONSTEXPR unsigned __int128
1510 	      round_error() _GLIBCXX_USE_NOEXCEPT { return 0; }
1511 	
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;
1516 	
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
1521 	       = denorm_absent;
1522 	      static _GLIBCXX_USE_CONSTEXPR bool has_denorm_loss = false;
1523 	
1524 	      static _GLIBCXX_CONSTEXPR unsigned __int128
1525 	      infinity() _GLIBCXX_USE_NOEXCEPT
1526 	      { return static_cast<unsigned __int128>(0); }
1527 	
1528 	      static _GLIBCXX_CONSTEXPR unsigned __int128
1529 	      quiet_NaN() _GLIBCXX_USE_NOEXCEPT
1530 	      { return static_cast<unsigned __int128>(0); }
1531 	
1532 	      static _GLIBCXX_CONSTEXPR unsigned __int128
1533 	      signaling_NaN() _GLIBCXX_USE_NOEXCEPT
1534 	      { return static_cast<unsigned __int128>(0); }
1535 	
1536 	      static _GLIBCXX_CONSTEXPR unsigned __int128
1537 	      denorm_min() _GLIBCXX_USE_NOEXCEPT
1538 	      { return static_cast<unsigned __int128>(0); }
1539 	
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;
1543 	
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;
1548 	    };
1549 	#endif
1550 	
1551 	  /// numeric_limits<float> specialization.
1552 	  template<>
1553 	    struct numeric_limits<float>
1554 	    {
1555 	      static _GLIBCXX_USE_CONSTEXPR bool is_specialized = true;
1556 	
1557 	      static _GLIBCXX_CONSTEXPR float 
1558 	      min() _GLIBCXX_USE_NOEXCEPT { return __FLT_MIN__; }
1559 	
1560 	      static _GLIBCXX_CONSTEXPR float 
1561 	      max() _GLIBCXX_USE_NOEXCEPT { return __FLT_MAX__; }
1562 	
1563 	#if __cplusplus >= 201103L
1564 	      static constexpr float 
1565 	      lowest() noexcept { return -__FLT_MAX__; }
1566 	#endif
1567 	
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__);
1573 	#endif
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__;
1578 	
1579 	      static _GLIBCXX_CONSTEXPR float 
1580 	      epsilon() _GLIBCXX_USE_NOEXCEPT { return __FLT_EPSILON__; }
1581 	
1582 	      static _GLIBCXX_CONSTEXPR float 
1583 	      round_error() _GLIBCXX_USE_NOEXCEPT { return 0.5F; }
1584 	
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__;
1589 	
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;
1597 	
1598 	      static _GLIBCXX_CONSTEXPR float 
1599 	      infinity() _GLIBCXX_USE_NOEXCEPT { return __builtin_huge_valf(); }
1600 	
1601 	      static _GLIBCXX_CONSTEXPR float 
1602 	      quiet_NaN() _GLIBCXX_USE_NOEXCEPT { return __builtin_nanf(""); }
1603 	
1604 	      static _GLIBCXX_CONSTEXPR float 
1605 	      signaling_NaN() _GLIBCXX_USE_NOEXCEPT { return __builtin_nansf(""); }
1606 	
1607 	      static _GLIBCXX_CONSTEXPR float 
1608 	      denorm_min() _GLIBCXX_USE_NOEXCEPT { return __FLT_DENORM_MIN__; }
1609 	
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;
1614 	
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 
1619 	       = round_to_nearest;
1620 	    };
1621 	
1622 	#undef __glibcxx_float_has_denorm_loss
1623 	#undef __glibcxx_float_traps
1624 	#undef __glibcxx_float_tinyness_before
1625 	
1626 	  /// numeric_limits<double> specialization.
1627 	  template<>
1628 	    struct numeric_limits<double>
1629 	    {
1630 	      static _GLIBCXX_USE_CONSTEXPR bool is_specialized = true;
1631 	
1632 	      static _GLIBCXX_CONSTEXPR double 
1633 	      min() _GLIBCXX_USE_NOEXCEPT { return __DBL_MIN__; }
1634 	
1635 	      static _GLIBCXX_CONSTEXPR double 
1636 	      max() _GLIBCXX_USE_NOEXCEPT { return __DBL_MAX__; }
1637 	
1638 	#if __cplusplus >= 201103L
1639 	      static constexpr double 
1640 	      lowest() noexcept { return -__DBL_MAX__; }
1641 	#endif
1642 	
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__);
1648 	#endif
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__;
1653 	
1654 	      static _GLIBCXX_CONSTEXPR double 
1655 	      epsilon() _GLIBCXX_USE_NOEXCEPT { return __DBL_EPSILON__; }
1656 	
1657 	      static _GLIBCXX_CONSTEXPR double 
1658 	      round_error() _GLIBCXX_USE_NOEXCEPT { return 0.5; }
1659 	
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__;
1664 	
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;
1672 	
1673 	      static _GLIBCXX_CONSTEXPR double 
1674 	      infinity() _GLIBCXX_USE_NOEXCEPT { return __builtin_huge_val(); }
1675 	
1676 	      static _GLIBCXX_CONSTEXPR double 
1677 	      quiet_NaN() _GLIBCXX_USE_NOEXCEPT { return __builtin_nan(""); }
1678 	
1679 	      static _GLIBCXX_CONSTEXPR double 
1680 	      signaling_NaN() _GLIBCXX_USE_NOEXCEPT { return __builtin_nans(""); }
1681 	
1682 	      static _GLIBCXX_CONSTEXPR double 
1683 	      denorm_min() _GLIBCXX_USE_NOEXCEPT { return __DBL_DENORM_MIN__; }
1684 	
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;
1689 	
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 
1694 	       = round_to_nearest;
1695 	    };
1696 	
1697 	#undef __glibcxx_double_has_denorm_loss
1698 	#undef __glibcxx_double_traps
1699 	#undef __glibcxx_double_tinyness_before
1700 	
1701 	  /// numeric_limits<long double> specialization.
1702 	  template<>
1703 	    struct numeric_limits<long double>
1704 	    {
1705 	      static _GLIBCXX_USE_CONSTEXPR bool is_specialized = true;
1706 	
1707 	      static _GLIBCXX_CONSTEXPR long double 
1708 	      min() _GLIBCXX_USE_NOEXCEPT { return __LDBL_MIN__; }
1709 	
1710 	      static _GLIBCXX_CONSTEXPR long double 
1711 	      max() _GLIBCXX_USE_NOEXCEPT { return __LDBL_MAX__; }
1712 	
1713 	#if __cplusplus >= 201103L
1714 	      static constexpr long double 
1715 	      lowest() noexcept { return -__LDBL_MAX__; }
1716 	#endif
1717 	
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__);
1723 	#endif
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__;
1728 	
1729 	      static _GLIBCXX_CONSTEXPR long double 
1730 	      epsilon() _GLIBCXX_USE_NOEXCEPT { return __LDBL_EPSILON__; }
1731 	
1732 	      static _GLIBCXX_CONSTEXPR long double 
1733 	      round_error() _GLIBCXX_USE_NOEXCEPT { return 0.5L; }
1734 	
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__;
1739 	
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;
1747 	
1748 	      static _GLIBCXX_CONSTEXPR long double 
1749 	      infinity() _GLIBCXX_USE_NOEXCEPT { return __builtin_huge_vall(); }
1750 	
1751 	      static _GLIBCXX_CONSTEXPR long double 
1752 	      quiet_NaN() _GLIBCXX_USE_NOEXCEPT { return __builtin_nanl(""); }
1753 	
1754 	      static _GLIBCXX_CONSTEXPR long double 
1755 	      signaling_NaN() _GLIBCXX_USE_NOEXCEPT { return __builtin_nansl(""); }
1756 	
1757 	      static _GLIBCXX_CONSTEXPR long double 
1758 	      denorm_min() _GLIBCXX_USE_NOEXCEPT { return __LDBL_DENORM_MIN__; }
1759 	
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;
1764 	
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 = 
1769 							      round_to_nearest;
1770 	    };
1771 	
1772 	#undef __glibcxx_long_double_has_denorm_loss
1773 	#undef __glibcxx_long_double_traps
1774 	#undef __glibcxx_long_double_tinyness_before
1775 	
1776 	_GLIBCXX_END_NAMESPACE_VERSION
1777 	} // namespace
1778 	
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
1785 	
1786 	#endif // _GLIBCXX_NUMERIC_LIMITS
1787