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