cartobase  5.0.5
limits_gcc3.h
Go to the documentation of this file.
1 /* This software and supporting documentation are distributed by
2  * Institut Federatif de Recherche 49
3  * CEA/NeuroSpin, Batiment 145,
4  * 91191 Gif-sur-Yvette cedex
5  * France
6  *
7  * This software is governed by the CeCILL-B license under
8  * French law and abiding by the rules of distribution of free software.
9  * You can use, modify and/or redistribute the software under the
10  * terms of the CeCILL-B license as circulated by CEA, CNRS
11  * and INRIA at the following URL "http://www.cecill.info".
12  *
13  * As a counterpart to the access to the source code and rights to copy,
14  * modify and redistribute granted by the license, users are provided only
15  * with a limited warranty and the software's author, the holder of the
16  * economic rights, and the successive licensors have only limited
17  * liability.
18  *
19  * In this respect, the user's attention is drawn to the risks associated
20  * with loading, using, modifying and/or developing or reproducing the
21  * software by the user in light of its specific status of free software,
22  * that may mean that it is complicated to manipulate, and that also
23  * therefore means that it is reserved for developers and experienced
24  * professionals having in-depth computer knowledge. Users are therefore
25  * encouraged to load and test the software's suitability as regards their
26  * requirements in conditions enabling the security of their systems and/or
27  * data to be ensured and, more generally, to use and operate it in the
28  * same conditions as regards security.
29  *
30  * The fact that you are presently reading this means that you have had
31  * knowledge of the CeCILL-B license and that you accept its terms.
32  */
33 
34 // Copyright (C) 1999, 2000, 2001, 2002 Free Software Foundation, Inc.
35 //
36 // This file is part of the GNU ISO C++ Library. This library is free
37 // software; you can redistribute it and/or modify it under the
38 // terms of the GNU General Public License as published by the
39 // Free Software Foundation; either version 2, or (at your option)
40 // any later version.
41 
42 // This library is distributed in the hope that it will be useful,
43 // but WITHOUT ANY WARRANTY; without even the implied warranty of
44 // MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
45 // GNU General Public License for more details.
46 
47 // You should have received a copy of the GNU General Public License along
48 // with this library; see the file COPYING. If not, write to the Free
49 // Software Foundation, 59 Temple Place - Suite 330, Boston, MA 02111-1307,
50 // USA.
51 
52 // As a special exception, you may use this file as part of a free software
53 // library without restriction. Specifically, if other files instantiate
54 // templates or use macros or inline functions from this file, or you compile
55 // this file and link it with other files to produce an executable, this
56 // file does not by itself cause the resulting executable to be covered by
57 // the GNU General Public License. This exception does not however
58 // invalidate any other reasons why the executable file might be covered by
59 // the GNU General Public License.
60 
61 // Note: this is not a conforming implementation.
62 // Written by Gabriel Dos Reis <gdr@codesourcery.com>
63 
64 //
65 // ISO 14882:1998
66 // 18.2.1
67 //
68 
74 #ifndef _CPP_NUMERIC_LIMITS
75 #define _CPP_NUMERIC_LIMITS 1
76 
77 #if defined( __GNUC__ ) && (__GNUC__-0 >= 3)
78 
79 #error This header should not be included, it should be in the standard C++ \
80 library
81 
82 #else
83 
84 //
85 // The numeric_limits<> traits document implementation-defined aspects
86 // of fundamental arithmetic data types (integers and floating points).
87 // From Standard C++ point of view, there are 13 such types:
88 // * integers
89 // bool (1)
90 // char, signed char, unsigned char (3)
91 // short, unsigned short (2)
92 // int, unsigned (2)
93 // long, unsigned long (2)
94 //
95 // * floating points
96 // float (1)
97 // double (1)
98 // long double (1)
99 //
100 // GNU C++ undertstands (where supported by the host C-library)
101 // * integer
102 // long long, unsigned long long (2)
103 //
104 // which brings us to 15 fundamental arithmetic data types in GNU C++.
105 //
106 //
107 // Since a numeric_limits<> is a bit tricky to get right, we rely on
108 // an interface composed of macros which should be defined in config/os
109 // or config/cpu when they differ from the generic (read arbitrary)
110 // definitions given here.
111 //
112 
113 // These values can be overridden in the target configuration file.
114 // The default values are appropriate for many 32-bit targets.
115 
116 #include <climits>
117 #include <cfloat>
118 
119 /* I don't really understand the direct relationship between max exponent
120  and the number of bits to store them... */
121 #define __carto_expo_bits( x ) ( x >= 16384 ? 15 : ( x >= 384 ? 11 : 8 ) )
122 #define __carto_float_bits ( FLT_MANT_DIG + __carto_expo_bits(FLT_MAX_EXP) )
123 #define __carto_double_bits ( DBL_MANT_DIG + __carto_expo_bits(DBL_MAX_EXP) )
124 #define __carto_ldouble_bits1 ( LDBL_MANT_DIG + __carto_expo_bits(LDBL_MAX_EXP) )
125 /* long double should be 80 bits for linux/32, 64 bits for irix/mips and 128
126  bits for solaris/sparc */
127 #define __carto_ldouble_bits ( __carto_ldouble_bits1 == 79 ? 80 : __carto_ldouble_bits1 )
128 
129 // --
130 
131 
132 #ifndef __glibcpp_char_bits
133 #define __glibcpp_char_bits 8
134 #endif
135 #ifdef __CHAR_UNSIGNED__
136 #define __glibcpp_plain_char_is_signed false
137 #else
138 #define __glibcpp_plain_char_is_signed true
139 #endif
140 #ifndef __glibcpp_short_bits
141 #define __glibcpp_short_bits 16
142 #endif
143 #ifndef __glibcpp_int_bits
144 #define __glibcpp_int_bits 32
145 #endif
146 #ifndef __glibcpp_long_bits
147 #define __glibcpp_long_bits 32
148 #endif
149 #ifndef __glibcpp_wchar_t_bits
150 #define __glibcpp_wchar_t_bits 32
151 #endif
152 #ifndef __glibcpp_wchar_t_is_signed
153 #define __glibcpp_wchar_t_is_signed true
154 #endif
155 #ifndef __glibcpp_long_long_bits
156 #define __glibcpp_long_long_bits 64
157 #endif
158 #ifndef __glibcpp_float_bits
159 #define __glibcpp_float_bits __carto_float_bits
160 #endif
161 #ifndef __glibcpp_double_bits
162 #define __glibcpp_double_bits __carto_double_bits
163 #endif
164 #ifndef __glibcpp_long_double_bits
165 #define __glibcpp_long_double_bits __carto_ldouble_bits
166 #endif
167 
168 #ifndef __glibcpp_char_traps
169 #define __glibcpp_char_traps true
170 #endif
171 #ifndef __glibcpp_short_traps
172 #define __glibcpp_short_traps true
173 #endif
174 #ifndef __glibcpp_int_traps
175 #define __glibcpp_int_traps true
176 #endif
177 #ifndef __glibcpp_long_traps
178 #define __glibcpp_long_traps true
179 #endif
180 #ifndef __glibcpp_wchar_t_traps
181 #define __glibcpp_wchar_t_traps true
182 #endif
183 #ifndef __glibcpp_long_long_traps
184 #define __glibcpp_long_long_traps true
185 #endif
186 
187 // You should not need to define any macros below this point, unless
188 // you have a machine with non-standard bit-widths.
189 
190 // These values are the minimums and maximums for standard data types
191 // of common widths.
192 
193 #define __glibcpp_s8_max 127
194 #define __glibcpp_s8_min (-__glibcpp_s8_max - 1)
195 #define __glibcpp_s8_digits 7
196 #define __glibcpp_s8_digits10 2
197 #define __glibcpp_u8_min 0U
198 #define __glibcpp_u8_max (__glibcpp_s8_max * 2 + 1)
199 #define __glibcpp_u8_digits 8
200 #define __glibcpp_u8_digits10 2
201 #define __glibcpp_s16_max 32767
202 #define __glibcpp_s16_min (-__glibcpp_s16_max - 1)
203 #define __glibcpp_s16_digits 15
204 #define __glibcpp_s16_digits10 4
205 #define __glibcpp_u16_min 0U
206 #define __glibcpp_u16_max (__glibcpp_s16_max * 2 + 1)
207 #define __glibcpp_u16_digits 16
208 #define __glibcpp_u16_digits10 4
209 #define __glibcpp_s32_max 2147483647L
210 #define __glibcpp_s32_min (-__glibcpp_s32_max - 1)
211 #define __glibcpp_s32_digits 31
212 #define __glibcpp_s32_digits10 9
213 #define __glibcpp_u32_min 0UL
214 #define __glibcpp_u32_max (__glibcpp_s32_max * 2U + 1)
215 #define __glibcpp_u32_digits 32
216 #define __glibcpp_u32_digits10 9
217 #define __glibcpp_s64_max 9223372036854775807LL
218 #define __glibcpp_s64_min (-__glibcpp_s64_max - 1)
219 #define __glibcpp_s64_digits 63
220 #define __glibcpp_s64_digits10 18
221 #define __glibcpp_u64_min 0ULL
222 #define __glibcpp_u64_max (__glibcpp_s64_max * 2ULL + 1)
223 #define __glibcpp_u64_digits 64
224 #define __glibcpp_u64_digits10 19
225 
226 #define __glibcpp_f32_min 1.17549435e-38F
227 #define __glibcpp_f32_max 3.40282347e+38F
228 #define __glibcpp_f32_digits 24
229 #define __glibcpp_f32_digits10 6
230 #define __glibcpp_f32_radix 2
231 #define __glibcpp_f32_epsilon 1.19209290e-07F
232 #define __glibcpp_f32_round_error 1.0F
233 #define __glibcpp_f32_min_exponent -125
234 #define __glibcpp_f32_min_exponent10 -37
235 #define __glibcpp_f32_max_exponent 128
236 #define __glibcpp_f32_max_exponent10 38
237 #define __glibcpp_f64_min 2.2250738585072014e-308
238 #define __glibcpp_f64_max 1.7976931348623157e+308
239 #define __glibcpp_f64_digits 53
240 #define __glibcpp_f64_digits10 15
241 #define __glibcpp_f64_radix 2
242 #define __glibcpp_f64_epsilon 2.2204460492503131e-16
243 #define __glibcpp_f64_round_error 1.0
244 #define __glibcpp_f64_min_exponent -1021
245 #define __glibcpp_f64_min_exponent10 -307
246 #define __glibcpp_f64_max_exponent 1024
247 #define __glibcpp_f64_max_exponent10 308
248 #define __glibcpp_f80_min 3.36210314311209350626e-4932L
249 #define __glibcpp_f80_max 1.18973149535723176502e+4932L
250 #define __glibcpp_f80_digits 64
251 #define __glibcpp_f80_digits10 18
252 #define __glibcpp_f80_radix 2
253 #define __glibcpp_f80_epsilon 1.08420217248550443401e-19L
254 #define __glibcpp_f80_round_error 1.0L
255 #define __glibcpp_f80_min_exponent -16381
256 #define __glibcpp_f80_min_exponent10 -4931
257 #define __glibcpp_f80_max_exponent 16384
258 #define __glibcpp_f80_max_exponent10 4932
259 #define __glibcpp_f96_min 1.68105157155604675313e-4932L
260 #define __glibcpp_f96_max 1.18973149535723176502e+4932L
261 #define __glibcpp_f96_digits 64
262 #define __glibcpp_f96_digits10 18
263 #define __glibcpp_f96_radix 2
264 #define __glibcpp_f96_epsilon 1.08420217248550443401e-19L
265 #define __glibcpp_f96_round_error 1.0L
266 #define __glibcpp_f96_min_exponent -16382
267 #define __glibcpp_f96_min_exponent10 -4931
268 #define __glibcpp_f96_max_exponent 16384
269 #define __glibcpp_f96_max_exponent10 4932
270 #define __glibcpp_f128_min 3.362103143112093506262677817321752603E-4932L
271 #define __glibcpp_f128_max 1.189731495357231765085759326628007016E+4932L
272 #define __glibcpp_f128_digits 113
273 #define __glibcpp_f128_digits10 33
274 #define __glibcpp_f128_radix 2
275 #define __glibcpp_f128_epsilon 1.925929944387235853055977942584927319E-34L
276 #define __glibcpp_f128_round_error 1.0L
277 #define __glibcpp_f128_min_exponent -16381
278 #define __glibcpp_f128_min_exponent10 -4931
279 #define __glibcpp_f128_max_exponent 16384
280 #define __glibcpp_f128_max_exponent10 4932
281 
282 // bool-specific hooks:
283 // __glibcpp_bool_digits __glibcpp_int_traps __glibcpp_long_traps
284 
285 #ifndef __glibcpp_bool_digits
286 #define __glibcpp_bool_digits 1
287 #endif
288 
289 // char.
290 
291 #define __glibcpp_plain_char_traps true
292 #define __glibcpp_signed_char_traps true
293 #define __glibcpp_unsigned_char_traps true
294 #ifndef __glibcpp_char_is_modulo
295 #define __glibcpp_char_is_modulo true
296 #endif
297 #ifndef __glibcpp_signed_char_is_modulo
298 #define __glibcpp_signed_char_is_modulo true
299 #endif
300 #if __glibcpp_char_bits == 8
301 #define __glibcpp_signed_char_min __glibcpp_s8_min
302 #define __glibcpp_signed_char_max __glibcpp_s8_max
303 #define __glibcpp_signed_char_digits __glibcpp_s8_digits
304 #define __glibcpp_signed_char_digits10 __glibcpp_s8_digits10
305 #define __glibcpp_unsigned_char_min __glibcpp_u8_min
306 #define __glibcpp_unsigned_char_max __glibcpp_u8_max
307 #define __glibcpp_unsigned_char_digits __glibcpp_u8_digits
308 #define __glibcpp_unsigned_char_digits10 __glibcpp_u8_digits10
309 #elif __glibcpp_char_bits == 16
310 #define __glibcpp_signed_char_min __glibcpp_s16_min
311 #define __glibcpp_signed_char_max __glibcpp_s16_max
312 #define __glibcpp_signed_char_digits __glibcpp_s16_digits
313 #define __glibcpp_signed_char_digits10 __glibcpp_s16_digits10
314 #define __glibcpp_unsigned_char_min __glibcpp_u16_min
315 #define __glibcpp_unsigned_char_max __glibcpp_u16_max
316 #define __glibcpp_unsigned_char_digits __glibcpp_u16_digits
317 #define __glibcpp_unsigned_char_digits10 __glibcpp_u16_digits10
318 #elif __glibcpp_char_bits == 32
319 #define __glibcpp_signed_char_min (signed char)__glibcpp_s32_min
320 #define __glibcpp_signed_char_max (signed char)__glibcpp_s32_max
321 #define __glibcpp_signed_char_digits __glibcpp_s32_digits
322 #define __glibcpp_signed_char_digits10 __glibcpp_s32_digits10
323 #define __glibcpp_unsigned_char_min (unsigned char)__glibcpp_u32_min
324 #define __glibcpp_unsigned_char_max (unsigned char)__glibcpp_u32_max
325 #define __glibcpp_unsigned_char_digits __glibcpp_u32_digits
326 #define __glibcpp_unsigned_char_digits10 __glibcpp_u32_digits10
327 #elif __glibcpp_char_bits == 64
328 #define __glibcpp_signed_char_min (signed char)__glibcpp_s64_min
329 #define __glibcpp_signed_char_max (signed char)__glibcpp_s64_max
330 #define __glibcpp_signed_char_digits __glibcpp_s64_digits
331 #define __glibcpp_signed_char_digits10 __glibcpp_s64_digits10
332 #define __glibcpp_unsigned_char_min (unsigned char)__glibcpp_u64_min
333 #define __glibcpp_unsigned_char_max (unsigned char)__glibcpp_u64_max
334 #define __glibcpp_unsigned_char_digits __glibcpp_u64_digits
335 #define __glibcpp_unsigned_char_digits10 __glibcpp_u64_digits10
336 #else
337 // You must define these macros in the configuration file.
338 #endif
339 
340 #if __glibcpp_plain_char_is_signed
341 #define __glibcpp_char_min (char)__glibcpp_signed_char_min
342 #define __glibcpp_char_max (char)__glibcpp_signed_char_max
343 #define __glibcpp_char_digits __glibcpp_signed_char_digits
344 #define __glibcpp_char_digits10 __glibcpp_signed_char_digits10
345 #else
346 #define __glibcpp_char_min (char)__glibcpp_unsigned_char_min
347 #define __glibcpp_char_max (char)__glibcpp_unsigned_char_max
348 #define __glibcpp_char_digits __glibcpp_unsigned_char_digits
349 #define __glibcpp_char_digits10 __glibcpp_unsigned_char_digits10
350 #endif
351 
352 // short
353 
354 #define __glibcpp_signed_short_traps true
355 #define __glibcpp_unsigned_short_traps true
356 #ifndef __glibcpp_signed_short_is_modulo
357 #define __glibcpp_signed_short_is_modulo true
358 #endif
359 #if __glibcpp_short_bits == 8
360 #define __glibcpp_signed_short_min __glibcpp_s8_min
361 #define __glibcpp_signed_short_max __glibcpp_s8_max
362 #define __glibcpp_signed_short_digits __glibcpp_s8_digits
363 #define __glibcpp_signed_short_digits10 __glibcpp_s8_digits10
364 #define __glibcpp_unsigned_short_min __glibcpp_u8_min
365 #define __glibcpp_unsigned_short_max __glibcpp_u8_max
366 #define __glibcpp_unsigned_short_digits __glibcpp_u8_digits
367 #define __glibcpp_unsigned_short_digits10 __glibcpp_u8_digits10
368 #elif __glibcpp_short_bits == 16
369 #define __glibcpp_signed_short_min __glibcpp_s16_min
370 #define __glibcpp_signed_short_max __glibcpp_s16_max
371 #define __glibcpp_signed_short_digits __glibcpp_s16_digits
372 #define __glibcpp_signed_short_digits10 __glibcpp_s16_digits10
373 #define __glibcpp_unsigned_short_min __glibcpp_u16_min
374 #define __glibcpp_unsigned_short_max __glibcpp_u16_max
375 #define __glibcpp_unsigned_short_digits __glibcpp_u16_digits
376 #define __glibcpp_unsigned_short_digits10 __glibcpp_u16_digits10
377 #elif __glibcpp_short_bits == 32
378 #define __glibcpp_signed_short_min (short)__glibcpp_s32_min
379 #define __glibcpp_signed_short_max (short)__glibcpp_s32_max
380 #define __glibcpp_signed_short_digits __glibcpp_s32_digits
381 #define __glibcpp_signed_short_digits10 __glibcpp_s32_digits10
382 #define __glibcpp_unsigned_short_min (unsigned short)__glibcpp_u32_min
383 #define __glibcpp_unsigned_short_max (unsigned short)__glibcpp_u32_max
384 #define __glibcpp_unsigned_short_digits __glibcpp_u32_digits
385 #define __glibcpp_unsigned_short_digits10 __glibcpp_u32_digits10
386 #elif __glibcpp_short_bits == 64
387 #define __glibcpp_signed_short_min (short)__glibcpp_s64_min
388 #define __glibcpp_signed_short_max (short)__glibcpp_s64_max
389 #define __glibcpp_signed_short_digits __glibcpp_s64_digits
390 #define __glibcpp_signed_short_digits10 __glibcpp_s64_digits10
391 #define __glibcpp_unsigned_short_min (unsigned short)__glibcpp_u64_min
392 #define __glibcpp_unsigned_short_max (unsigned short)__glibcpp_u64_max
393 #define __glibcpp_unsigned_short_digits __glibcpp_u64_digits
394 #define __glibcpp_unsigned_short_digits10 __glibcpp_u64_digits10
395 #else
396 // You must define these macros in the configuration file.
397 #endif
398 
399 // int
400 
401 #define __glibcpp_signed_int_traps true
402 #define __glibcpp_unsigned_int_traps true
403 #ifndef __glibcpp_signed_int_is_modulo
404 #define __glibcpp_signed_int_is_modulo true
405 #endif
406 #if __glibcpp_int_bits == 8
407 #define __glibcpp_signed_int_min __glibcpp_s8_min
408 #define __glibcpp_signed_int_max __glibcpp_s8_max
409 #define __glibcpp_signed_int_digits __glibcpp_s8_digits
410 #define __glibcpp_signed_int_digits10 __glibcpp_s8_digits10
411 #define __glibcpp_unsigned_int_min __glibcpp_u8_min
412 #define __glibcpp_unsigned_int_max __glibcpp_u8_max
413 #define __glibcpp_unsigned_int_digits __glibcpp_u8_digits
414 #define __glibcpp_unsigned_int_digits10 __glibcpp_u8_digits10
415 #elif __glibcpp_int_bits == 16
416 #define __glibcpp_signed_int_min __glibcpp_s16_min
417 #define __glibcpp_signed_int_max __glibcpp_s16_max
418 #define __glibcpp_signed_int_digits __glibcpp_s16_digits
419 #define __glibcpp_signed_int_digits10 __glibcpp_s16_digits10
420 #define __glibcpp_unsigned_int_min __glibcpp_u16_min
421 #define __glibcpp_unsigned_int_max __glibcpp_u16_max
422 #define __glibcpp_unsigned_int_digits __glibcpp_u16_digits
423 #define __glibcpp_unsigned_int_digits10 __glibcpp_u16_digits10
424 #elif __glibcpp_int_bits == 32
425 #define __glibcpp_signed_int_min (int)__glibcpp_s32_min
426 #define __glibcpp_signed_int_max (int)__glibcpp_s32_max
427 #define __glibcpp_signed_int_digits __glibcpp_s32_digits
428 #define __glibcpp_signed_int_digits10 __glibcpp_s32_digits10
429 #define __glibcpp_unsigned_int_min (unsigned)__glibcpp_u32_min
430 #define __glibcpp_unsigned_int_max (unsigned)__glibcpp_u32_max
431 #define __glibcpp_unsigned_int_digits __glibcpp_u32_digits
432 #define __glibcpp_unsigned_int_digits10 __glibcpp_u32_digits10
433 #elif __glibcpp_int_bits == 64
434 #define __glibcpp_signed_int_min (int)__glibcpp_s64_min
435 #define __glibcpp_signed_int_max (int)__glibcpp_s64_max
436 #define __glibcpp_signed_int_digits __glibcpp_s64_digits
437 #define __glibcpp_signed_int_digits10 __glibcpp_s64_digits10
438 #define __glibcpp_unsigned_int_min (unsigned)__glibcpp_u64_min
439 #define __glibcpp_unsigned_int_max (unsigned)__glibcpp_u64_max
440 #define __glibcpp_unsigned_int_digits __glibcpp_u64_digits
441 #define __glibcpp_unsigned_int_digits10 __glibcpp_u64_digits10
442 #else
443 // You must define these macros in the configuration file.
444 #endif
445 
446 // long
447 
448 #define __glibcpp_signed_long_traps true
449 #define __glibcpp_unsigned_long_traps true
450 #ifndef __glibcpp_signed_long_is_modulo
451 #define __glibcpp_signed_long_is_modulo true
452 #endif
453 #if __glibcpp_long_bits == 8
454 #define __glibcpp_signed_long_min __glibcpp_s8_min
455 #define __glibcpp_signed_long_max __glibcpp_s8_max
456 #define __glibcpp_signed_long_digits __glibcpp_s8_digits
457 #define __glibcpp_signed_long_digits10 __glibcpp_s8_digits10
458 #define __glibcpp_unsigned_long_min __glibcpp_u8_min
459 #define __glibcpp_unsigned_long_max __glibcpp_u8_max
460 #define __glibcpp_unsigned_long_digits __glibcpp_u8_digits
461 #define __glibcpp_unsigned_long_digits10 __glibcpp_u8_digits10
462 #elif __glibcpp_long_bits == 16
463 #define __glibcpp_signed_long_min __glibcpp_s16_min
464 #define __glibcpp_signed_long_max __glibcpp_s16_max
465 #define __glibcpp_signed_long_digits __glibcpp_s16_digits
466 #define __glibcpp_signed_long_digits10 __glibcpp_s16_digits10
467 #define __glibcpp_unsigned_long_min __glibcpp_u16_min
468 #define __glibcpp_unsigned_long_max __glibcpp_u16_max
469 #define __glibcpp_unsigned_long_digits __glibcpp_u16_digits
470 #define __glibcpp_unsigned_long_digits10 __glibcpp_u16_digits10
471 #elif __glibcpp_long_bits == 32
472 #define __glibcpp_signed_long_min __glibcpp_s32_min
473 #define __glibcpp_signed_long_max __glibcpp_s32_max
474 #define __glibcpp_signed_long_digits __glibcpp_s32_digits
475 #define __glibcpp_signed_long_digits10 __glibcpp_s32_digits10
476 #define __glibcpp_unsigned_long_min __glibcpp_u32_min
477 #define __glibcpp_unsigned_long_max __glibcpp_u32_max
478 #define __glibcpp_unsigned_long_digits __glibcpp_u32_digits
479 #define __glibcpp_unsigned_long_digits10 __glibcpp_u32_digits10
480 #elif __glibcpp_long_bits == 64
481 #define __glibcpp_signed_long_min (long)__glibcpp_s64_min
482 #define __glibcpp_signed_long_max (long)__glibcpp_s64_max
483 #define __glibcpp_signed_long_digits __glibcpp_s64_digits
484 #define __glibcpp_signed_long_digits10 __glibcpp_s64_digits10
485 #define __glibcpp_unsigned_long_min (unsigned long)__glibcpp_u64_min
486 #define __glibcpp_unsigned_long_max (unsigned long)__glibcpp_u64_max
487 #define __glibcpp_unsigned_long_digits __glibcpp_u64_digits
488 #define __glibcpp_unsigned_long_digits10 __glibcpp_u64_digits10
489 #else
490 // You must define these macros in the configuration file.
491 #endif
492 
493 // long long
494 
495 #define __glibcpp_signed_long_long_traps true
496 #define __glibcpp_signed_long_long_traps true
497 #ifndef __glibcpp_signed_long_long_is_modulo
498 #define __glibcpp_signed_long_long_is_modulo true
499 #endif
500 #if __glibcpp_long_long_bits == 8
501 #define __glibcpp_signed_long_long_min __glibcpp_s8_min
502 #define __glibcpp_signed_long_long_max __glibcpp_s8_max
503 #define __glibcpp_signed_long_long_digits __glibcpp_s8_digits
504 #define __glibcpp_signed_long_long_digits10 __glibcpp_s8_digits10
505 #define __glibcpp_unsigned_long_long_min __glibcpp_u8_min
506 #define __glibcpp_unsigned_long_long_max __glibcpp_u8_max
507 #define __glibcpp_unsigned_long_long_digits __glibcpp_u8_digits
508 #define __glibcpp_unsigned_long_long_digits10 __glibcpp_u8_digits10
509 #elif __glibcpp_long_long_bits == 16
510 #define __glibcpp_signed_long_long_min __glibcpp_s16_min
511 #define __glibcpp_signed_long_long_max __glibcpp_s16_max
512 #define __glibcpp_signed_long_long_digits __glibcpp_s16_digits
513 #define __glibcpp_signed_long_long_digits10 __glibcpp_s16_digits10
514 #define __glibcpp_unsigned_long_long_min __glibcpp_u16_min
515 #define __glibcpp_unsigned_long_long_max __glibcpp_u16_max
516 #define __glibcpp_unsigned_long_long_digits __glibcpp_u16_digits
517 #define __glibcpp_unsigned_long_long_digits10 __glibcpp_u16_digits10
518 #elif __glibcpp_long_long_bits == 32
519 #define __glibcpp_signed_long_long_min __glibcpp_s32_min
520 #define __glibcpp_signed_long_long_max __glibcpp_s32_max
521 #define __glibcpp_signed_long_long_digits __glibcpp_s32_digits
522 #define __glibcpp_signed_long_long_digits10 __glibcpp_s32_digits10
523 #define __glibcpp_unsigned_long_long_min __glibcpp_u32_min
524 #define __glibcpp_unsigned_long_long_max __glibcpp_u32_max
525 #define __glibcpp_unsigned_long_long_digits __glibcpp_u32_digits
526 #define __glibcpp_unsigned_long_long_digits10 __glibcpp_u32_digits10
527 #elif __glibcpp_long_long_bits == 64
528 #define __glibcpp_signed_long_long_min __glibcpp_s64_min
529 #define __glibcpp_signed_long_long_max __glibcpp_s64_max
530 #define __glibcpp_signed_long_long_digits __glibcpp_s64_digits
531 #define __glibcpp_signed_long_long_digits10 __glibcpp_s64_digits10
532 #define __glibcpp_signed_long_long_traps true
533 #define __glibcpp_unsigned_long_long_min __glibcpp_u64_min
534 #define __glibcpp_unsigned_long_long_max __glibcpp_u64_max
535 #define __glibcpp_unsigned_long_long_digits __glibcpp_u64_digits
536 #define __glibcpp_unsigned_long_long_digits10 __glibcpp_u64_digits10
537 #define __glibcpp_unsigned_long_long_traps true
538 #else
539 // You must define these macros in the configuration file.
540 #endif
541 
542 // wchar_t
543 
544 #define __glibcpp_wchar_t_traps true
545 #ifndef __glibcpp_wchar_t_is_modulo
546 #define __glibcpp_wchar_t_is_modulo true
547 #endif
548 #if __glibcpp_wchar_t_is_signed
549 #if __glibcpp_wchar_t_bits == 8
550 #define __glibcpp_wchar_t_min __glibcpp_s8_min
551 #define __glibcpp_wchar_t_max __glibcpp_s8_max
552 #define __glibcpp_wchar_t_digits __glibcpp_s8_digits
553 #define __glibcpp_wchar_t_digits10 __glibcpp_s8_digits10
554 #elif __glibcpp_wchar_t_bits == 16
555 #define __glibcpp_wchar_t_min __glibcpp_s16_min
556 #define __glibcpp_wchar_t_max __glibcpp_s16_max
557 #define __glibcpp_wchar_t_digits __glibcpp_s16_digits
558 #define __glibcpp_wchar_t_digits10 __glibcpp_s16_digits10
559 #elif __glibcpp_wchar_t_bits == 32
560 #define __glibcpp_wchar_t_min (wchar_t)__glibcpp_s32_min
561 #define __glibcpp_wchar_t_max (wchar_t)__glibcpp_s32_max
562 #define __glibcpp_wchar_t_digits __glibcpp_s32_digits
563 #define __glibcpp_wchar_t_digits10 __glibcpp_s32_digits10
564 #elif __glibcpp_wchar_t_bits == 64
565 #define __glibcpp_wchar_t_min (wchar_t)__glibcpp_s64_min
566 #define __glibcpp_wchar_t_max (wchar_t)__glibcpp_s64_max
567 #define __glibcpp_wchar_t_digits __glibcpp_s64_digits
568 #define __glibcpp_wchar_t_digits10 __glibcpp_s64_digits10
569 #else
570 // You must define these macros in the configuration file.
571 #endif
572 #else
573 #if __glibcpp_wchar_t_bits == 8
574 #define __glibcpp_wchar_t_min __glibcpp_u8_min
575 #define __glibcpp_wchar_t_max __glibcpp_u8_max
576 #define __glibcpp_wchar_t_digits __glibcpp_u8_digits
577 #define __glibcpp_wchar_t_digits10 __glibcpp_u8_digits10
578 #elif __glibcpp_wchar_t_bits == 16
579 #define __glibcpp_wchar_t_min __glibcpp_u16_min
580 #define __glibcpp_wchar_t_max __glibcpp_u16_max
581 #define __glibcpp_wchar_t_digits __glibcpp_u16_digits
582 #define __glibcpp_wchar_t_digits10 __glibcpp_u16_digits10
583 #elif __glibcpp_wchar_t_bits == 32
584 #define __glibcpp_wchar_t_min (wchar_t)__glibcpp_u32_min
585 #define __glibcpp_wchar_t_max (wchar_t)__glibcpp_u32_max
586 #define __glibcpp_wchar_t_digits __glibcpp_u32_digits
587 #define __glibcpp_wchar_t_digits10 __glibcpp_u32_digits10
588 #elif __glibcpp_wchar_t_bits == 64
589 #define __glibcpp_wchar_t_min (wchar_t)__glibcpp_u64_min
590 #define __glibcpp_wchar_t_max (wchar_t)__glibcpp_u64_max
591 #define __glibcpp_wchar_t_digits __glibcpp_u64_digits
592 #define __glibcpp_wchar_t_digits10 __glibcpp_u64_digits10
593 #else
594 // You must define these macros in the configuration file.
595 #endif
596 #endif
597 
598 // float
599 //
600 
601 #if __glibcpp_float_bits == 32
602 #define __glibcpp_float_min __glibcpp_f32_min
603 #define __glibcpp_float_max __glibcpp_f32_max
604 #define __glibcpp_float_digits __glibcpp_f32_digits
605 #define __glibcpp_float_digits10 __glibcpp_f32_digits10
606 #define __glibcpp_float_radix __glibcpp_f32_radix
607 #define __glibcpp_float_epsilon __glibcpp_f32_epsilon
608 #define __glibcpp_float_round_error __glibcpp_f32_round_error
609 #define __glibcpp_float_min_exponent __glibcpp_f32_min_exponent
610 #define __glibcpp_float_min_exponent10 __glibcpp_f32_min_exponent10
611 #define __glibcpp_float_max_exponent __glibcpp_f32_max_exponent
612 #define __glibcpp_float_max_exponent10 __glibcpp_f32_max_exponent10
613 #elif __glibcpp_float_bits == 64
614 #define __glibcpp_float_min __glibcpp_f64_min
615 #define __glibcpp_float_max __glibcpp_f64_max
616 #define __glibcpp_float_digits __glibcpp_f64_digits
617 #define __glibcpp_float_digits10 __glibcpp_f64_digits10
618 #define __glibcpp_float_radix __glibcpp_f64_radix
619 #define __glibcpp_float_epsilon __glibcpp_f64_epsilon
620 #define __glibcpp_float_round_error __glibcpp_f64_round_error
621 #define __glibcpp_float_min_exponent __glibcpp_f64_min_exponent
622 #define __glibcpp_float_min_exponent10 __glibcpp_f64_min_exponent10
623 #define __glibcpp_float_max_exponent __glibcpp_f64_max_exponent
624 #define __glibcpp_float_max_exponent10 __glibcpp_f64_max_exponent10
625 #elif __glibcpp_float_bits == 80
626 #define __glibcpp_float_min __glibcpp_f80_min
627 #define __glibcpp_float_max __glibcpp_f80_max
628 #define __glibcpp_float_digits __glibcpp_f80_digits
629 #define __glibcpp_float_digits10 __glibcpp_f80_digits10
630 #define __glibcpp_float_radix __glibcpp_f80_radix
631 #define __glibcpp_float_epsilon __glibcpp_f80_epsilon
632 #define __glibcpp_float_round_error __glibcpp_f80_round_error
633 #define __glibcpp_float_min_exponent __glibcpp_f80_min_exponent
634 #define __glibcpp_float_min_exponent10 __glibcpp_f80_min_exponent10
635 #define __glibcpp_float_max_exponent __glibcpp_f80_max_exponent
636 #define __glibcpp_float_max_exponent10 __glibcpp_f80_max_exponent10
637 #else
638 // You must define these macros in the configuration file.
639 #endif
640 
641 // FIXME: These are just stubs and inkorrect
642 
643 #ifndef __glibcpp_float_has_infinity
644 #define __glibcpp_float_has_infinity false
645 #endif
646 
647 #ifndef __glibcpp_float_has_quiet_NaN
648 #define __glibcpp_float_has_quiet_NaN false
649 #endif
650 
651 #ifndef __glibcpp_float_has_signaling_NaN
652 #define __glibcpp_float_has_signaling_NaN false
653 #endif
654 
655 #ifndef __glibcpp_float_has_denorm
656 #define __glibcpp_float_has_denorm denorm_absent
657 #endif
658 
659 #ifndef __glibcpp_float_has_denorm_loss
660 #define __glibcpp_float_has_denorm_loss false
661 #endif
662 
663 #ifndef __glibcpp_float_infinity
664 #define __glibcpp_float_infinity 0.0F
665 #endif
666 
667 #ifndef __glibcpp_float_quiet_NaN
668 #define __glibcpp_float_quiet_NaN 0.0F
669 #endif
670 
671 #ifndef __glibcpp_float_signaling_NaN
672 #define __glibcpp_float_signaling_NaN 0.0F
673 #endif
674 
675 #ifndef __glibcpp_float_denorm_min
676 #define __glibcpp_float_denorm_min 0.0F
677 #endif
678 
679 #ifndef __glibcpp_float_is_iec559
680 #define __glibcpp_float_is_iec559 false
681 #endif
682 
683 #ifndef __glibcpp_float_is_bounded
684 #define __glibcpp_float_is_bounded true
685 #endif
686 
687 #ifndef __glibcpp_float_is_modulo
688 #define __glibcpp_float_is_modulo false
689 #endif
690 
691 #ifndef __glibcpp_float_traps
692 #define __glibcpp_float_traps false
693 #endif
694 
695 #ifndef __glibcpp_float_tinyness_before
696 #define __glibcpp_float_tinyness_before false
697 #endif
698 
699 #ifndef __glibcpp_float_round_style
700 #define __glibcpp_float_round_style round_toward_zero
701 #endif
702 
703 // double
704 
705 #if __glibcpp_double_bits == 32
706 #define __glibcpp_double_min __glibcpp_f32_min
707 #define __glibcpp_double_max __glibcpp_f32_max
708 #define __glibcpp_double_digits __glibcpp_f32_digits
709 #define __glibcpp_double_digits10 __glibcpp_f32_digits10
710 #define __glibcpp_double_radix __glibcpp_f32_radix
711 #define __glibcpp_double_epsilon __glibcpp_f32_epsilon
712 #define __glibcpp_double_round_error __glibcpp_f32_round_error
713 #define __glibcpp_double_min_exponent __glibcpp_f32_min_exponent
714 #define __glibcpp_double_min_exponent10 __glibcpp_f32_min_exponent10
715 #define __glibcpp_double_max_exponent __glibcpp_f32_max_exponent
716 #define __glibcpp_double_max_exponent10 __glibcpp_f32_max_exponent10
717 #elif __glibcpp_double_bits == 64
718 #define __glibcpp_double_min __glibcpp_f64_min
719 #define __glibcpp_double_max __glibcpp_f64_max
720 #define __glibcpp_double_digits __glibcpp_f64_digits
721 #define __glibcpp_double_digits10 __glibcpp_f64_digits10
722 #define __glibcpp_double_radix __glibcpp_f64_radix
723 #define __glibcpp_double_epsilon __glibcpp_f64_epsilon
724 #define __glibcpp_double_round_error __glibcpp_f64_round_error
725 #define __glibcpp_double_min_exponent __glibcpp_f64_min_exponent
726 #define __glibcpp_double_min_exponent10 __glibcpp_f64_min_exponent10
727 #define __glibcpp_double_max_exponent __glibcpp_f64_max_exponent
728 #define __glibcpp_double_max_exponent10 __glibcpp_f64_max_exponent10
729 #elif __glibcpp_double_bits == 80
730 #define __glibcpp_double_min __glibcpp_f80_min
731 #define __glibcpp_double_max __glibcpp_f80_max
732 #define __glibcpp_double_digits __glibcpp_f80_digits
733 #define __glibcpp_double_digits10 __glibcpp_f80_digits10
734 #define __glibcpp_double_radix __glibcpp_f80_radix
735 #define __glibcpp_double_epsilon __glibcpp_f80_epsilon
736 #define __glibcpp_double_round_error __glibcpp_f80_round_error
737 #define __glibcpp_double_min_exponent __glibcpp_f80_min_exponent
738 #define __glibcpp_double_min_exponent10 __glibcpp_f80_min_exponent10
739 #define __glibcpp_double_max_exponent __glibcpp_f80_max_exponent
740 #define __glibcpp_double_max_exponent10 __glibcpp_f80_max_exponent10
741 #else
742 // You must define these macros in the configuration file.
743 #endif
744 
745 // FIXME: These are just stubs and inkorrect
746 
747 #ifndef __glibcpp_double_has_infinity
748 #define __glibcpp_double_has_infinity false
749 #endif
750 
751 #ifndef __glibcpp_double_has_quiet_NaN
752 #define __glibcpp_double_has_quiet_NaN false
753 #endif
754 
755 #ifndef __glibcpp_double_has_signaling_NaN
756 #define __glibcpp_double_has_signaling_NaN false
757 #endif
758 
759 #ifndef __glibcpp_double_has_denorm
760 #define __glibcpp_double_has_denorm denorm_absent
761 #endif
762 
763 #ifndef __glibcpp_double_has_denorm_loss
764 #define __glibcpp_double_has_denorm_loss false
765 #endif
766 
767 #ifndef __glibcpp_double_infinity
768 #define __glibcpp_double_infinity 0.0
769 #endif
770 
771 #ifndef __glibcpp_double_quiet_NaN
772 #define __glibcpp_double_quiet_NaN 0.0
773 #endif
774 
775 #ifndef __glibcpp_double_signaling_NaN
776 #define __glibcpp_double_signaling_NaN 0.0
777 #endif
778 
779 #ifndef __glibcpp_double_denorm_min
780 #define __glibcpp_double_denorm_min 0.0
781 #endif
782 
783 #ifndef __glibcpp_double_is_iec559
784 #define __glibcpp_double_is_iec559 false
785 #endif
786 
787 #ifndef __glibcpp_double_is_bounded
788 #define __glibcpp_double_is_bounded true
789 #endif
790 
791 #ifndef __glibcpp_double_is_modulo
792 #define __glibcpp_double_is_modulo false
793 #endif
794 
795 #ifndef __glibcpp_double_traps
796 #define __glibcpp_double_traps false
797 #endif
798 
799 #ifndef __glibcpp_double_tinyness_before
800 #define __glibcpp_double_tinyness_before false
801 #endif
802 
803 #ifndef __glibcpp_double_round_style
804 #define __glibcpp_double_round_style round_toward_zero
805 #endif
806 
807 // long double
808 
809 #if __glibcpp_long_double_bits == 32
810 #define __glibcpp_long_double_min __glibcpp_f32_min
811 #define __glibcpp_long_double_max __glibcpp_f32_max
812 #define __glibcpp_long_double_digits __glibcpp_f32_digits
813 #define __glibcpp_long_double_digits10 __glibcpp_f32_digits10
814 #define __glibcpp_long_double_radix __glibcpp_f32_radix
815 #define __glibcpp_long_double_epsilon __glibcpp_f32_epsilon
816 #define __glibcpp_long_double_round_error __glibcpp_f32_round_error
817 #define __glibcpp_long_double_min_exponent __glibcpp_f32_min_exponent
818 #define __glibcpp_long_double_min_exponent10 __glibcpp_f32_min_exponent10
819 #define __glibcpp_long_double_max_exponent __glibcpp_f32_max_exponent
820 #define __glibcpp_long_double_max_exponent10 __glibcpp_f32_max_exponent10
821 #elif __glibcpp_long_double_bits == 64
822 #define __glibcpp_long_double_min __glibcpp_f64_min
823 #define __glibcpp_long_double_max __glibcpp_f64_max
824 #define __glibcpp_long_double_digits __glibcpp_f64_digits
825 #define __glibcpp_long_double_digits10 __glibcpp_f64_digits10
826 #define __glibcpp_long_double_radix __glibcpp_f64_radix
827 #define __glibcpp_long_double_epsilon __glibcpp_f64_epsilon
828 #define __glibcpp_long_double_round_error __glibcpp_f64_round_error
829 #define __glibcpp_long_double_min_exponent __glibcpp_f64_min_exponent
830 #define __glibcpp_long_double_min_exponent10 __glibcpp_f64_min_exponent10
831 #define __glibcpp_long_double_max_exponent __glibcpp_f64_max_exponent
832 #define __glibcpp_long_double_max_exponent10 __glibcpp_f64_max_exponent10
833 #elif __glibcpp_long_double_bits == 80
834 #define __glibcpp_long_double_min __glibcpp_f80_min
835 #define __glibcpp_long_double_max __glibcpp_f80_max
836 #define __glibcpp_long_double_digits __glibcpp_f80_digits
837 #define __glibcpp_long_double_digits10 __glibcpp_f80_digits10
838 #define __glibcpp_long_double_radix __glibcpp_f80_radix
839 #define __glibcpp_long_double_epsilon __glibcpp_f80_epsilon
840 #define __glibcpp_long_double_round_error __glibcpp_f80_round_error
841 #define __glibcpp_long_double_min_exponent __glibcpp_f80_min_exponent
842 #define __glibcpp_long_double_min_exponent10 __glibcpp_f80_min_exponent10
843 #define __glibcpp_long_double_max_exponent __glibcpp_f80_max_exponent
844 #define __glibcpp_long_double_max_exponent10 __glibcpp_f80_max_exponent10
845 #elif __glibcpp_long_double_bits == 96
846 #define __glibcpp_long_double_min __glibcpp_f96_min
847 #define __glibcpp_long_double_max __glibcpp_f96_max
848 #define __glibcpp_long_double_digits __glibcpp_f96_digits
849 #define __glibcpp_long_double_digits10 __glibcpp_f96_digits10
850 #define __glibcpp_long_double_radix __glibcpp_f96_radix
851 #define __glibcpp_long_double_epsilon __glibcpp_f96_epsilon
852 #define __glibcpp_long_double_round_error __glibcpp_f96_round_error
853 #define __glibcpp_long_double_min_exponent __glibcpp_f96_min_exponent
854 #define __glibcpp_long_double_min_exponent10 __glibcpp_f96_min_exponent10
855 #define __glibcpp_long_double_max_exponent __glibcpp_f96_max_exponent
856 #define __glibcpp_long_double_max_exponent10 __glibcpp_f96_max_exponent10
857 #elif __glibcpp_long_double_bits == 128
858 #define __glibcpp_long_double_min __glibcpp_f128_min
859 #define __glibcpp_long_double_max __glibcpp_f128_max
860 #define __glibcpp_long_double_digits __glibcpp_f128_digits
861 #define __glibcpp_long_double_digits10 __glibcpp_f128_digits10
862 #define __glibcpp_long_double_radix __glibcpp_f128_radix
863 #define __glibcpp_long_double_epsilon __glibcpp_f128_epsilon
864 #define __glibcpp_long_double_round_error __glibcpp_f128_round_error
865 #define __glibcpp_long_double_min_exponent __glibcpp_f128_min_exponent
866 #define __glibcpp_long_double_min_exponent10 __glibcpp_f128_min_exponent10
867 #define __glibcpp_long_double_max_exponent __glibcpp_f128_max_exponent
868 #define __glibcpp_long_double_max_exponent10 __glibcpp_f128_max_exponent10
869 #else
870 // You must define these macros in the configuration file.
871 #endif
872 
873 // FIXME: These are just stubs and inkorrect
874 
875 #ifndef __glibcpp_long_double_has_infinity
876 #define __glibcpp_long_double_has_infinity false
877 #endif
878 
879 #ifndef __glibcpp_long_double_has_quiet_NaN
880 #define __glibcpp_long_double_has_quiet_NaN false
881 #endif
882 
883 #ifndef __glibcpp_long_double_has_signaling_NaN
884 #define __glibcpp_long_double_has_signaling_NaN false
885 #endif
886 
887 #ifndef __glibcpp_long_double_has_denorm
888 #define __glibcpp_long_double_has_denorm denorm_absent
889 #endif
890 
891 #ifndef __glibcpp_long_double_has_denorm_loss
892 #define __glibcpp_long_double_has_denorm_loss false
893 #endif
894 
895 #ifndef __glibcpp_long_double_infinity
896 #define __glibcpp_long_double_infinity 0.0L
897 #endif
898 
899 #ifndef __glibcpp_long_double_quiet_NaN
900 #define __glibcpp_long_double_quiet_NaN 0.0L
901 #endif
902 
903 #ifndef __glibcpp_long_double_signaling_NaN
904 #define __glibcpp_long_double_signaling_NaN 0.0L
905 #endif
906 
907 #ifndef __glibcpp_long_double_denorm_min
908 #define __glibcpp_long_double_denorm_min 0.0L
909 #endif
910 
911 #ifndef __glibcpp_long_double_is_iec559
912 #define __glibcpp_long_double_is_iec559 false
913 #endif
914 
915 #ifndef __glibcpp_long_double_is_bounded
916 #define __glibcpp_long_double_is_bounded true
917 #endif
918 
919 #ifndef __glibcpp_long_double_is_modulo
920 #define __glibcpp_long_double_is_modulo false
921 #endif
922 
923 #ifndef __glibcpp_long_double_traps
924 #define __glibcpp_long_double_traps false
925 #endif
926 
927 #ifndef __glibcpp_long_double_tinyness_before
928 #define __glibcpp_long_double_tinyness_before false
929 #endif
930 
931 #ifndef __glibcpp_long_double_round_style
932 #define __glibcpp_long_double_round_style round_toward_zero
933 #endif
934 
935 
936 namespace std
937 {
939  {
945  };
946 
948  {
952  };
953 
954  //
955  // The primary class traits
956  //
958  {
959  static const bool is_specialized = false;
960 
961  static const int digits = 0;
962  static const int digits10 = 0;
963  static const bool is_signed = false;
964  static const bool is_integer = false;
965  static const bool is_exact = false;
966  static const int radix = 0;
967 
968  static const int min_exponent = 0;
969  static const int min_exponent10 = 0;
970  static const int max_exponent = 0;
971  static const int max_exponent10 = 0;
972 
973  static const bool has_infinity = false;
974  static const bool has_quiet_NaN = false;
975  static const bool has_signaling_NaN = false;
977  static const bool has_denorm_loss = false;
978 
979  static const bool is_iec559 = false;
980  static const bool is_bounded = false;
981  static const bool is_modulo = false;
982 
983  static const bool traps = false;
984  static const bool tinyness_before = false;
986  };
987 
988  template<typename _Tp>
990  {
991  static _Tp min() throw() { return static_cast<_Tp>(0); }
992  static _Tp max() throw() { return static_cast<_Tp>(0); }
993  static _Tp epsilon() throw() { return static_cast<_Tp>(0); }
994  static _Tp round_error() throw() { return static_cast<_Tp>(0); }
995  static _Tp infinity() throw() { return static_cast<_Tp>(0); }
996  static _Tp quiet_NaN() throw() { return static_cast<_Tp>(0); }
997  static _Tp signaling_NaN() throw() { return static_cast<_Tp>(0); }
998  static _Tp denorm_min() throw() { return static_cast<_Tp>(0); }
999  };
1000 
1001  // Now there follow 15 explicit specializations. Yes, 15. Make sure
1002  // you get the count right.
1003  template<>
1004  struct numeric_limits<bool>
1005  {
1006  static const bool is_specialized = true;
1007 
1008  static bool min() throw()
1009  { return false; }
1010 
1011  static bool max() throw()
1012  { return true; }
1013 
1014  static const int digits = __glibcpp_bool_digits;
1015  static const int digits10 = 0;
1016  static const bool is_signed = false;
1017  static const bool is_integer = true;
1018  static const bool is_exact = true;
1019  static const int radix = 2;
1020  static bool epsilon() throw()
1021  { return false; }
1022  static bool round_error() throw()
1023  { return false; }
1024 
1025  static const int min_exponent = 0;
1026  static const int min_exponent10 = 0;
1027  static const int max_exponent = 0;
1028  static const int max_exponent10 = 0;
1029 
1030  static const bool has_infinity = false;
1031  static const bool has_quiet_NaN = false;
1032  static const bool has_signaling_NaN = false;
1034  static const bool has_denorm_loss = false;
1035 
1036  static bool infinity() throw()
1037  { return false; }
1038  static bool quiet_NaN() throw()
1039  { return false; }
1040  static bool signaling_NaN() throw()
1041  { return false; }
1042  static bool denorm_min() throw()
1043  { return false; }
1044 
1045  static const bool is_iec559 = false;
1046  static const bool is_bounded = true;
1047  static const bool is_modulo = false;
1048 
1049  // It is not clear what it means for a boolean type to trap.
1050  // This is a DR on the LWG issue list. Here, I use integer
1051  // promotion semantics.
1052  static const bool traps = __glibcpp_signed_int_traps
1054  static const bool tinyness_before = false;
1056  };
1057 
1058 #undef __glibcpp_bool_digits
1059 
1060  template<>
1061  struct numeric_limits<char>
1062  {
1063  static const bool is_specialized = true;
1064 
1065  static char min() throw()
1066  { return __glibcpp_char_min; }
1067  static char max() throw()
1068  { return __glibcpp_char_max; }
1069 
1070  static const int digits = __glibcpp_char_digits;
1071  static const int digits10 = __glibcpp_char_digits10;
1073  static const bool is_integer = true;
1074  static const bool is_exact = true;
1075  static const int radix = 2;
1076  static char epsilon() throw()
1077  { return char(); }
1078  static char round_error() throw()
1079  { return char(); }
1080 
1081  static const int min_exponent = 0;
1082  static const int min_exponent10 = 0;
1083  static const int max_exponent = 0;
1084  static const int max_exponent10 = 0;
1085 
1086  static const bool has_infinity = false;
1087  static const bool has_quiet_NaN = false;
1088  static const bool has_signaling_NaN = false;
1090  static const bool has_denorm_loss = false;
1091 
1092  static char infinity() throw()
1093  { return char(); }
1094  static char quiet_NaN() throw()
1095  { return char(); }
1096  static char signaling_NaN() throw()
1097  { return char(); }
1098  static char denorm_min() throw()
1099  { return static_cast<char>(0); }
1100 
1101  static const bool is_iec559 = false;
1102  static const bool is_bounded = true;
1104 
1105  static const bool traps = __glibcpp_char_traps;
1106  static const bool tinyness_before = false;
1108  };
1109 
1110 #undef __glibcpp_char_min
1111 #undef __glibcpp_char_max
1112 #undef __glibcpp_char_digits
1113 #undef __glibcpp_char_digits10
1114 #undef __glibcpp_char_is_signed
1115 #undef __glibcpp_char_is_modulo
1116 #undef __glibcpp_char_traps
1117 
1118 
1119 
1120  template<>
1121  struct numeric_limits<signed char>
1122  {
1123  static const bool is_specialized = true;
1124 
1125  static signed char min() throw()
1126  { return __glibcpp_signed_char_min; }
1127  static signed char max() throw()
1128  { return __glibcpp_signed_char_max; }
1129 
1132  static const bool is_signed = true;
1133  static const bool is_integer = true;
1134  static const bool is_exact = true;
1135  static const int radix = 2;
1136  static signed char epsilon() throw()
1137  { return 0; }
1138  static signed char round_error() throw()
1139  { return 0; }
1140 
1141  static const int min_exponent = 0;
1142  static const int min_exponent10 = 0;
1143  static const int max_exponent = 0;
1144  static const int max_exponent10 = 0;
1145 
1146  static const bool has_infinity = false;
1147  static const bool has_quiet_NaN = false;
1148  static const bool has_signaling_NaN = false;
1150  static const bool has_denorm_loss = false;
1151 
1152  static signed char infinity() throw()
1153  { return static_cast<signed char>(0); }
1154  static signed char quiet_NaN() throw()
1155  { return static_cast<signed char>(0); }
1156  static signed char signaling_NaN() throw()
1157  { return static_cast<signed char>(0); }
1158  static signed char denorm_min() throw()
1159  { return static_cast<signed char>(0); }
1160 
1161  static const bool is_iec559 = false;
1162  static const bool is_bounded = true;
1164 
1165  static const bool traps = __glibcpp_signed_char_traps;
1166  static const bool tinyness_before = false;
1168  };
1169 
1170 #undef __glibcpp_signed_char_min
1171 #undef __glibcpp_signed_char_max
1172 #undef __glibcpp_signed_char_digits
1173 #undef __glibcpp_signed_char_digits10
1174 #undef __glibcpp_signed_char_is_modulo
1175 #undef __glibcpp_signed_char_traps
1176 
1177  template<>
1178  struct numeric_limits<unsigned char>
1179  {
1180  static const bool is_specialized = true;
1181 
1182  static unsigned char min() throw()
1183  { return 0; }
1184  static unsigned char max() throw()
1185  { return __glibcpp_unsigned_char_max; }
1186 
1189  static const bool is_signed = false;
1190  static const bool is_integer = true;
1191  static const bool is_exact = true;
1192  static const int radix = 2;
1193  static unsigned char epsilon() throw()
1194  { return 0; }
1195  static unsigned char round_error() throw()
1196  { return 0; }
1197 
1198  static const int min_exponent = 0;
1199  static const int min_exponent10 = 0;
1200  static const int max_exponent = 0;
1201  static const int max_exponent10 = 0;
1202 
1203  static const bool has_infinity = false;
1204  static const bool has_quiet_NaN = false;
1205  static const bool has_signaling_NaN = false;
1207  static const bool has_denorm_loss = false;
1208 
1209  static unsigned char infinity() throw()
1210  { return static_cast<unsigned char>(0); }
1211  static unsigned char quiet_NaN() throw()
1212  { return static_cast<unsigned char>(0); }
1213  static unsigned char signaling_NaN() throw()
1214  { return static_cast<unsigned char>(0); }
1215  static unsigned char denorm_min() throw()
1216  { return static_cast<unsigned char>(0); }
1217 
1218  static const bool is_iec559 = false;
1219  static const bool is_bounded = true;
1220  static const bool is_modulo = true;
1221 
1223  static const bool tinyness_before = false;
1225  };
1226 
1227 #undef __glibcpp_unsigned_char_max
1228 #undef __glibcpp_unsigned_char_digits
1229 #undef __glibcpp_unsigned_char_digits10
1230 #undef __glibcpp_unsigned_char_traps
1231 
1232  template<>
1233  struct numeric_limits<wchar_t>
1234  {
1235  static const bool is_specialized = true;
1236 
1237  static wchar_t min() throw()
1238  { return __glibcpp_wchar_t_min; }
1239  static wchar_t max() throw()
1240  { return __glibcpp_wchar_t_max; }
1241 
1242  static const int digits = __glibcpp_wchar_t_digits;
1245  static const bool is_integer = true;
1246  static const bool is_exact = true;
1247  static const int radix = 2;
1248  static wchar_t epsilon() throw()
1249  { return 0; }
1250  static wchar_t round_error() throw()
1251  { return 0; }
1252 
1253  static const int min_exponent = 0;
1254  static const int min_exponent10 = 0;
1255  static const int max_exponent = 0;
1256  static const int max_exponent10 = 0;
1257 
1258  static const bool has_infinity = false;
1259  static const bool has_quiet_NaN = false;
1260  static const bool has_signaling_NaN = false;
1262  static const bool has_denorm_loss = false;
1263 
1264  static wchar_t infinity() throw()
1265  { return wchar_t(); }
1266  static wchar_t quiet_NaN() throw()
1267  { return wchar_t(); }
1268  static wchar_t signaling_NaN() throw()
1269  { return wchar_t(); }
1270  static wchar_t denorm_min() throw()
1271  { return wchar_t(); }
1272 
1273  static const bool is_iec559 = false;
1274  static const bool is_bounded = true;
1276 
1277  static const bool traps = __glibcpp_wchar_t_traps;
1278  static const bool tinyness_before = false;
1280  };
1281 
1282 #undef __glibcpp_wchar_t_min
1283 #undef __glibcpp_wchar_t_max
1284 #undef __glibcpp_wchar_t_digits
1285 #undef __glibcpp_wchar_t_digits10
1286 #undef __glibcpp_wchar_t_is_signed
1287 #undef __glibcpp_wchar_t_is_modulo
1288 #undef __glibcpp_wchar_t_traps
1289 
1290  template<>
1291  struct numeric_limits<short>
1292  {
1293  static const bool is_specialized = true;
1294 
1295  static short min() throw()
1296  { return __glibcpp_signed_short_min; }
1297  static short max() throw()
1298  { return __glibcpp_signed_short_max; }
1299 
1302  static const bool is_signed = true;
1303  static const bool is_integer = true;
1304  static const bool is_exact = true;
1305  static const int radix = 2;
1306  static short epsilon() throw()
1307  { return 0; }
1308  static short round_error() throw()
1309  { return 0; }
1310 
1311  static const int min_exponent = 0;
1312  static const int min_exponent10 = 0;
1313  static const int max_exponent = 0;
1314  static const int max_exponent10 = 0;
1315 
1316  static const bool has_infinity = false;
1317  static const bool has_quiet_NaN = false;
1318  static const bool has_signaling_NaN = false;
1320  static const bool has_denorm_loss = false;
1321 
1322  static short infinity() throw()
1323  { return short(); }
1324  static short quiet_NaN() throw()
1325  { return short(); }
1326  static short signaling_NaN() throw()
1327  { return short(); }
1328  static short denorm_min() throw()
1329  { return short(); }
1330 
1331  static const bool is_iec559 = true;
1332  static const bool is_bounded = true;
1334 
1336  static const bool tinyness_before = false;
1338  };
1339 
1340 #undef __glibcpp_signed_short_min
1341 #undef __glibcpp_signed_short_max
1342 #undef __glibcpp_signed_short_digits
1343 #undef __glibcpp_signed_short_digits10
1344 #undef __glibcpp_signed_short_is_modulo
1345 #undef __glibcpp_signed_short_traps
1346 
1347  template<>
1348  struct numeric_limits<unsigned short>
1349  {
1350  static const bool is_specialized = true;
1351 
1352  static unsigned short min() throw()
1353  { return 0; }
1354  static unsigned short max() throw()
1355  { return __glibcpp_unsigned_short_max; }
1356 
1359  static const bool is_signed = false;
1360  static const bool is_integer = true;
1361  static const bool is_exact = true;
1362  static const int radix = 2;
1363  static unsigned short epsilon() throw()
1364  { return 0; }
1365  static unsigned short round_error() throw()
1366  { return 0; }
1367 
1368  static const int min_exponent = 0;
1369  static const int min_exponent10 = 0;
1370  static const int max_exponent = 0;
1371  static const int max_exponent10 = 0;
1372 
1373  static const bool has_infinity = false;
1374  static const bool has_quiet_NaN = false;
1375  static const bool has_signaling_NaN = false;
1377  static const bool has_denorm_loss = false;
1378 
1379  static unsigned short infinity() throw()
1380  { return static_cast<unsigned short>(0); }
1381  static unsigned short quiet_NaN() throw()
1382  { return static_cast<unsigned short>(0); }
1383  static unsigned short signaling_NaN() throw()
1384  { return static_cast<unsigned short>(0); }
1385  static unsigned short denorm_min() throw()
1386  { return static_cast<unsigned short>(0); }
1387 
1388  static const bool is_iec559 = true;
1389  static const bool is_bounded = true;
1390  static const bool is_modulo = true;
1391 
1393  static const bool tinyness_before = false;
1395  };
1396 
1397 #undef __glibcpp_unsigned_short_max
1398 #undef __glibcpp_unsigned_short_digits
1399 #undef __glibcpp_unsigned_short_digits10
1400 #undef __glibcpp_unsigned_short_traps
1401 
1402  template<>
1403  struct numeric_limits<int>
1404  {
1405  static const bool is_specialized = true;
1406 
1407  static int min() throw()
1408  { return __glibcpp_signed_int_min; }
1409  static int max() throw()
1410  { return __glibcpp_signed_int_max; }
1411 
1414  static const bool is_signed = true;
1415  static const bool is_integer = true;
1416  static const bool is_exact = true;
1417  static const int radix = 2;
1418  static int epsilon() throw()
1419  { return 0; }
1420  static int round_error() throw()
1421  { return 0; }
1422 
1423  static const int min_exponent = 0;
1424  static const int min_exponent10 = 0;
1425  static const int max_exponent = 0;
1426  static const int max_exponent10 = 0;
1427 
1428  static const bool has_infinity = false;
1429  static const bool has_quiet_NaN = false;
1430  static const bool has_signaling_NaN = false;
1432  static const bool has_denorm_loss = false;
1433 
1434  static int infinity() throw()
1435  { return static_cast<int>(0); }
1436  static int quiet_NaN() throw()
1437  { return static_cast<int>(0); }
1438  static int signaling_NaN() throw()
1439  { return static_cast<int>(0); }
1440  static int denorm_min() throw()
1441  { return static_cast<int>(0); }
1442 
1443  static const bool is_iec559 = true;
1444  static const bool is_bounded = true;
1446 
1447  static const bool traps = __glibcpp_signed_int_traps;
1448  static const bool tinyness_before = false;
1450  };
1451 
1452 #undef __glibcpp_signed_int_min
1453 #undef __glibcpp_signed_int_max
1454 #undef __glibcpp_signed_int_digits
1455 #undef __glibcpp_signed_int_digits10
1456 #undef __glibcpp_signed_int_is_modulo
1457 #undef __glibcpp_signed_int_traps
1458 
1459  template<>
1460  struct numeric_limits<unsigned int>
1461  {
1462  static const bool is_specialized = true;
1463 
1464  static unsigned int min() throw()
1465  { return 0; }
1466  static unsigned int max() throw()
1467  { return __glibcpp_unsigned_int_max; }
1468 
1471  static const bool is_signed = false;
1472  static const bool is_integer = true;
1473  static const bool is_exact = true;
1474  static const int radix = 2;
1475  static unsigned int epsilon() throw()
1476  { return 0; }
1477  static unsigned int round_error() throw()
1478  { return 0; }
1479 
1480  static const int min_exponent = 0;
1481  static const int min_exponent10 = 0;
1482  static const int max_exponent = 0;
1483  static const int max_exponent10 = 0;
1484 
1485  static const bool has_infinity = false;
1486  static const bool has_quiet_NaN = false;
1487  static const bool has_signaling_NaN = false;
1489  static const bool has_denorm_loss = false;
1490 
1491  static unsigned int infinity() throw()
1492  { return static_cast<unsigned int>(0); }
1493  static unsigned int quiet_NaN() throw()
1494  { return static_cast<unsigned int>(0); }
1495  static unsigned int signaling_NaN() throw()
1496  { return static_cast<unsigned int>(0); }
1497  static unsigned int denorm_min() throw()
1498  { return static_cast<unsigned int>(0); }
1499 
1500  static const bool is_iec559 = true;
1501  static const bool is_bounded = true;
1502  static const bool is_modulo = true;
1503 
1505  static const bool tinyness_before = false;
1507  };
1508 
1509 #undef __glibcpp_unsigned_int_max
1510 #undef __glibcpp_unsigned_int_digits
1511 #undef __glibcpp_unsigned_int_digits10
1512 #undef __glibcpp_unsigned_int_traps
1513 
1514  template<>
1515  struct numeric_limits<long>
1516  {
1517  static const bool is_specialized = true;
1518 
1519  static long min() throw()
1520  { return __glibcpp_signed_long_min; }
1521  static long max() throw()
1522  { return __glibcpp_signed_long_max; }
1523 
1526  static const bool is_signed = true;
1527  static const bool is_integer = true;
1528  static const bool is_exact = true;
1529  static const int radix = 2;
1530  static long epsilon() throw()
1531  { return 0; }
1532  static long round_error() throw()
1533  { return 0; }
1534 
1535  static const int min_exponent = 0;
1536  static const int min_exponent10 = 0;
1537  static const int max_exponent = 0;
1538  static const int max_exponent10 = 0;
1539 
1540  static const bool has_infinity = false;
1541  static const bool has_quiet_NaN = false;
1542  static const bool has_signaling_NaN = false;
1544  static const bool has_denorm_loss = false;
1545 
1546  static long infinity() throw()
1547  { return static_cast<long>(0); }
1548  static long quiet_NaN() throw()
1549  { return static_cast<long>(0); }
1550  static long signaling_NaN() throw()
1551  { return static_cast<long>(0); }
1552  static long denorm_min() throw()
1553  { return static_cast<long>(0); }
1554 
1555  static const bool is_iec559 = true;
1556  static const bool is_bounded = true;
1558 
1559  static const bool traps = __glibcpp_signed_long_traps;
1560  static const bool tinyness_before = false;
1562  };
1563 
1564 #undef __glibcpp_signed_long_min
1565 #undef __glibcpp_signed_long_max
1566 #undef __glibcpp_signed_long_digits
1567 #undef __glibcpp_signed_long_digits10
1568 #undef __glibcpp_signed_long_is_modulo
1569 #undef __glibcpp_signed_long_traps
1570 
1571  template<>
1572  struct numeric_limits<unsigned long>
1573  {
1574  static const bool is_specialized = true;
1575 
1576  static unsigned long min() throw()
1577  { return 0; }
1578  static unsigned long max() throw()
1579  { return __glibcpp_unsigned_long_max; }
1580 
1583  static const bool is_signed = false;
1584  static const bool is_integer = true;
1585  static const bool is_exact = true;
1586  static const int radix = 2;
1587  static unsigned long epsilon() throw()
1588  { return 0; }
1589  static unsigned long round_error() throw()
1590  { return 0; }
1591 
1592  static const int min_exponent = 0;
1593  static const int min_exponent10 = 0;
1594  static const int max_exponent = 0;
1595  static const int max_exponent10 = 0;
1596 
1597  static const bool has_infinity = false;
1598  static const bool has_quiet_NaN = false;
1599  static const bool has_signaling_NaN = false;
1601  static const bool has_denorm_loss = false;
1602 
1603  static unsigned long infinity() throw()
1604  { return static_cast<unsigned long>(0); }
1605  static unsigned long quiet_NaN() throw()
1606  { return static_cast<unsigned long>(0); }
1607  static unsigned long signaling_NaN() throw()
1608  { return static_cast<unsigned long>(0); }
1609  static unsigned long denorm_min() throw()
1610  { return static_cast<unsigned long>(0); }
1611 
1612  static const bool is_iec559 = true;
1613  static const bool is_bounded = true;
1614  static const bool is_modulo = true;
1615 
1617  static const bool tinyness_before = false;
1619  };
1620 
1621 #undef __glibcpp_unsigned_long_max
1622 #undef __glibcpp_unsigned_long_digits
1623 #undef __glibcpp_unsigned_long_digits10
1624 #undef __glibcpp_unsigned_long_traps
1625 
1626  template<>
1627  struct numeric_limits<long long>
1628  {
1629  static const bool is_specialized = true;
1630 
1631  static long long min() throw()
1632  { return __glibcpp_signed_long_long_min; }
1633  static long long max() throw()
1634  { return __glibcpp_signed_long_long_max; }
1635 
1638  static const bool is_signed = true;
1639  static const bool is_integer = true;
1640  static const bool is_exact = true;
1641  static const int radix = 2;
1642  static long long epsilon() throw()
1643  { return 0; }
1644  static long long round_error() throw()
1645  { return 0; }
1646 
1647  static const int min_exponent = 0;
1648  static const int min_exponent10 = 0;
1649  static const int max_exponent = 0;
1650  static const int max_exponent10 = 0;
1651 
1652  static const bool has_infinity = false;
1653  static const bool has_quiet_NaN = false;
1654  static const bool has_signaling_NaN = false;
1656  static const bool has_denorm_loss = false;
1657 
1658  static long long infinity() throw()
1659  { return static_cast<long long>(0); }
1660  static long long quiet_NaN() throw()
1661  { return static_cast<long long>(0); }
1662  static long long signaling_NaN() throw()
1663  { return static_cast<long long>(0); }
1664  static long long denorm_min() throw()
1665  { return static_cast<long long>(0); }
1666 
1667  static const bool is_iec559 = true;
1668  static const bool is_bounded = true;
1670 
1672  static const bool tinyness_before = false;
1674  };
1675 
1676 #undef __glibcpp_signed_long_long_min
1677 #undef __glibcpp_signed_long_long_max
1678 #undef __glibcpp_signed_long_long_digits
1679 #undef __glibcpp_signed_long_long_digits10
1680 #undef __glibcpp_signed_long_long_is_modulo
1681 #undef __glibcpp_signed_long_long_traps
1682 
1683  template<>
1684  struct numeric_limits<unsigned long long>
1685  {
1686  static const bool is_specialized = true;
1687 
1688  static unsigned long long min() throw()
1689  { return 0; }
1690  static unsigned long long max() throw()
1692 
1695  static const bool is_signed = false;
1696  static const bool is_integer = true;
1697  static const bool is_exact = true;
1698  static const int radix = 2;
1699  static unsigned long long epsilon() throw()
1700  { return 0; }
1701  static unsigned long long round_error() throw()
1702  { return 0; }
1703 
1704  static const int min_exponent = 0;
1705  static const int min_exponent10 = 0;
1706  static const int max_exponent = 0;
1707  static const int max_exponent10 = 0;
1708 
1709  static const bool has_infinity = false;
1710  static const bool has_quiet_NaN = false;
1711  static const bool has_signaling_NaN = false;
1713  static const bool has_denorm_loss = false;
1714 
1715  static unsigned long long infinity() throw()
1716  { return static_cast<unsigned long long>(0); }
1717  static unsigned long long quiet_NaN() throw()
1718  { return static_cast<unsigned long long>(0); }
1719  static unsigned long long signaling_NaN() throw()
1720  { return static_cast<unsigned long long>(0); }
1721  static unsigned long long denorm_min() throw()
1722  { return static_cast<unsigned long long>(0); }
1723 
1724  static const bool is_iec559 = true;
1725  static const bool is_bounded = true;
1726  static const bool is_modulo = true;
1727 
1728  static const bool traps = true;
1729  static const bool tinyness_before = false;
1731  };
1732 
1733 #undef __glibcpp_unsigned_long_long_max
1734 #undef __glibcpp_unsigned_long_long_digits
1735 #undef __glibcpp_unsigned_long_long_digits10
1736 #undef __glibcpp_unsigned_long_long_traps
1737 
1738  template<>
1739  struct numeric_limits<float>
1740  {
1741  static const bool is_specialized = true;
1742 
1743  static float min() throw()
1744  { return __glibcpp_float_min; }
1745  static float max() throw()
1746  { return __glibcpp_float_max; }
1747 
1748  static const int digits = __glibcpp_float_digits;
1749  static const int digits10 = __glibcpp_float_digits10;
1750  static const bool is_signed = true;
1751  static const bool is_integer = false;
1752  static const bool is_exact = false;
1753  static const int radix = __glibcpp_float_radix;
1754  static float epsilon() throw()
1755  { return __glibcpp_float_epsilon; }
1756  static float round_error() throw()
1757  { return __glibcpp_float_round_error; }
1758 
1759  static const int min_exponent = __glibcpp_float_min_exponent;
1760  static const int min_exponent10 = __glibcpp_float_min_exponent10;
1761  static const int max_exponent = __glibcpp_float_max_exponent;
1762  static const int max_exponent10 = __glibcpp_float_max_exponent10;
1763 
1769 
1770  static float infinity() throw()
1771  { return __glibcpp_float_infinity; }
1772  static float quiet_NaN() throw()
1773  { return __glibcpp_float_quiet_NaN; }
1774  static float signaling_NaN() throw()
1775  { return __glibcpp_float_signaling_NaN; }
1776  static float denorm_min() throw()
1777  { return __glibcpp_float_denorm_min; }
1778 
1782 
1783  static const bool traps = __glibcpp_float_traps;
1786  };
1787 
1788 #undef __glibcpp_float_min
1789 #undef __glibcpp_float_max
1790 #undef __glibcpp_float_digits
1791 #undef __glibcpp_float_digits10
1792 #undef __glibcpp_float_radix
1793 #undef __glibcpp_float_round_error
1794 #undef __glibcpp_float_min_exponent
1795 #undef __glibcpp_float_min_exponent10
1796 #undef __glibcpp_float_max_exponent
1797 #undef __glibcpp_float_max_exponent10
1798 #undef __glibcpp_float_has_infinity
1799 #undef __glibcpp_float_has_quiet_NaN
1800 #undef __glibcpp_float_has_signaling_NaN
1801 #undef __glibcpp_float_has_denorm
1802 #undef __glibcpp_float_has_denorm_loss
1803 #undef __glibcpp_float_infinity
1804 #undef __glibcpp_float_quiet_NaN
1805 #undef __glibcpp_float_signaling_NaN
1806 #undef __glibcpp_float_denorm_min
1807 #undef __glibcpp_float_is_iec559
1808 #undef __glibcpp_float_is_bounded
1809 #undef __glibcpp_float_is_modulo
1810 #undef __glibcpp_float_traps
1811 #undef __glibcpp_float_tinyness_before
1812 #undef __glibcpp_float_round_style
1813 
1814  template<>
1815  struct numeric_limits<double>
1816  {
1817  static const bool is_specialized = true;
1818 
1819  static double min() throw()
1820  { return __glibcpp_double_min; }
1821  static double max() throw()
1822  { return __glibcpp_double_max; }
1823 
1824  static const int digits = __glibcpp_double_digits;
1825  static const int digits10 = __glibcpp_double_digits10;
1826  static const bool is_signed = true;
1827  static const bool is_integer = false;
1828  static const bool is_exact = false;
1829  static const int radix = __glibcpp_double_radix;
1830  static double epsilon() throw()
1831  { return __glibcpp_double_epsilon; }
1832  static double round_error() throw()
1833  { return __glibcpp_double_round_error; }
1834 
1835  static const int min_exponent = __glibcpp_double_min_exponent;
1836  static const int min_exponent10 = __glibcpp_double_min_exponent10;
1837  static const int max_exponent = __glibcpp_double_max_exponent;
1838  static const int max_exponent10 = __glibcpp_double_max_exponent10;
1839 
1846 
1847  static double infinity() throw()
1848  { return __glibcpp_double_infinity; }
1849  static double quiet_NaN() throw()
1850  { return __glibcpp_double_quiet_NaN; }
1851  static double signaling_NaN() throw()
1852  { return __glibcpp_double_signaling_NaN; }
1853  static double denorm_min() throw()
1854  { return __glibcpp_double_denorm_min; }
1855 
1859 
1860  static const bool traps = __glibcpp_double_traps;
1864  };
1865 
1866 #undef __glibcpp_double_min
1867 #undef __glibcpp_double_max
1868 #undef __glibcpp_double_digits
1869 #undef __glibcpp_double_digits10
1870 #undef __glibcpp_double_radix
1871 #undef __glibcpp_double_round_error
1872 #undef __glibcpp_double_min_exponent
1873 #undef __glibcpp_double_min_exponent10
1874 #undef __glibcpp_double_max_exponent
1875 #undef __glibcpp_double_max_exponent10
1876 #undef __glibcpp_double_has_infinity
1877 #undef __glibcpp_double_has_quiet_NaN
1878 #undef __glibcpp_double_has_signaling_NaN
1879 #undef __glibcpp_double_has_denorm
1880 #undef __glibcpp_double_has_denorm_loss
1881 #undef __glibcpp_double_infinity
1882 #undef __glibcpp_double_quiet_NaN
1883 #undef __glibcpp_double_signaling_NaN
1884 #undef __glibcpp_double_denorm_min
1885 #undef __glibcpp_double_is_iec559
1886 #undef __glibcpp_double_is_bounded
1887 #undef __glibcpp_double_is_modulo
1888 #undef __glibcpp_double_traps
1889 #undef __glibcpp_double_tinyness_before
1890 #undef __glibcpp_double_round_style
1891 
1892 
1893  template<>
1894  struct numeric_limits<long double>
1895  {
1896  static const bool is_specialized = true;
1897 
1898  static long double min() throw()
1899  { return __glibcpp_long_double_min; }
1900  static long double max() throw()
1901  { return __glibcpp_long_double_max; }
1902 
1903  static const int digits = __glibcpp_long_double_digits;
1904  static const int digits10 = __glibcpp_long_double_digits10;
1905  static const bool is_signed = true;
1906  static const bool is_integer = false;
1907  static const bool is_exact = false;
1908  static const int radix = __glibcpp_long_double_radix;
1909  static long double epsilon() throw()
1910  { return __glibcpp_long_double_epsilon; }
1911  static long double round_error() throw()
1912  { return __glibcpp_long_double_round_error; }
1913 
1914  static const int min_exponent = __glibcpp_long_double_min_exponent;
1915  static const int min_exponent10 = __glibcpp_long_double_min_exponent10;
1916  static const int max_exponent = __glibcpp_long_double_max_exponent;
1917  static const int max_exponent10 = __glibcpp_long_double_max_exponent10;
1918 
1921  static const bool has_signaling_NaN =
1925  static const bool has_denorm_loss =
1927 
1928  static long double infinity() throw()
1929  { return __glibcpp_long_double_infinity; }
1930  static long double quiet_NaN() throw()
1932  static long double signaling_NaN() throw()
1934  static long double denorm_min() throw()
1936 
1940 
1941  static const bool traps = __glibcpp_long_double_traps;
1945  };
1946 
1947 #undef __glibcpp_long_double_min
1948 #undef __glibcpp_long_double_max
1949 #undef __glibcpp_long_double_digits
1950 #undef __glibcpp_long_double_digits10
1951 #undef __glibcpp_long_double_radix
1952 #undef __glibcpp_long_double_round_error
1953 #undef __glibcpp_long_double_min_exponent
1954 #undef __glibcpp_long_double_min_exponent10
1955 #undef __glibcpp_long_double_max_exponent
1956 #undef __glibcpp_long_double_max_exponent10
1957 #undef __glibcpp_long_double_has_infinity
1958 #undef __glibcpp_long_double_has_quiet_NaN
1959 #undef __glibcpp_long_double_has_signaling_NaN
1960 #undef __glibcpp_long_double_has_denorm
1961 #undef __glibcpp_long_double_has_denorm_loss
1962 #undef __glibcpp_long_double_infinity
1963 #undef __glibcpp_long_double_quiet_NaN
1964 #undef __glibcpp_long_double_signaling_NaN
1965 #undef __glibcpp_long_double_denorm_min
1966 #undef __glibcpp_long_double_is_iec559
1967 #undef __glibcpp_long_double_is_bounded
1968 #undef __glibcpp_long_double_is_modulo
1969 #undef __glibcpp_long_double_traps
1970 #undef __glibcpp_long_double_tinyness_before
1971 #undef __glibcpp_long_double_round_style
1972 
1973 } // namespace std
1974 
1975 #endif // gcc < 3
1976 
1977 #endif // _CPP_NUMERIC_LIMITS
static unsigned long long max()
Definition: limits_gcc3.h:1690
static unsigned short denorm_min()
Definition: limits_gcc3.h:1385
static long double quiet_NaN()
Definition: limits_gcc3.h:1930
#define __glibcpp_unsigned_long_long_digits
Definition: limits_gcc3.h:535
#define __glibcpp_signed_short_max
Definition: limits_gcc3.h:370
static const int digits10
Definition: limits_gcc3.h:962
#define __glibcpp_double_traps
Definition: limits_gcc3.h:796
#define __glibcpp_signed_char_traps
Definition: limits_gcc3.h:292
static const bool has_signaling_NaN
Definition: limits_gcc3.h:975
#define __glibcpp_double_is_modulo
Definition: limits_gcc3.h:792
#define __glibcpp_wchar_t_min
Definition: limits_gcc3.h:584
static const int min_exponent
Definition: limits_gcc3.h:968
static const int max_exponent10
Definition: limits_gcc3.h:971
#define __glibcpp_signed_short_is_modulo
Definition: limits_gcc3.h:357
#define __glibcpp_unsigned_short_traps
Definition: limits_gcc3.h:355
#define __glibcpp_float_is_bounded
Definition: limits_gcc3.h:684
static unsigned char quiet_NaN()
Definition: limits_gcc3.h:1211
#define __glibcpp_signed_char_min
Definition: limits_gcc3.h:301
static _Tp denorm_min()
Definition: limits_gcc3.h:998
#define __glibcpp_float_infinity
Definition: limits_gcc3.h:664
static const bool is_bounded
Definition: limits_gcc3.h:980
static const int min_exponent10
Definition: limits_gcc3.h:969
#define __glibcpp_double_quiet_NaN
Definition: limits_gcc3.h:772
static unsigned short epsilon()
Definition: limits_gcc3.h:1363
#define __glibcpp_signed_long_is_modulo
Definition: limits_gcc3.h:451
static unsigned char round_error()
Definition: limits_gcc3.h:1195
static unsigned long infinity()
Definition: limits_gcc3.h:1603
#define __glibcpp_char_is_modulo
Definition: limits_gcc3.h:295
#define __glibcpp_long_double_tinyness_before
Definition: limits_gcc3.h:928
static unsigned int denorm_min()
Definition: limits_gcc3.h:1497
#define __glibcpp_long_double_has_signaling_NaN
Definition: limits_gcc3.h:884
static unsigned long long denorm_min()
Definition: limits_gcc3.h:1721
static unsigned short infinity()
Definition: limits_gcc3.h:1379
static const int max_exponent
Definition: limits_gcc3.h:970
#define __glibcpp_double_tinyness_before
Definition: limits_gcc3.h:800
static unsigned long denorm_min()
Definition: limits_gcc3.h:1609
static unsigned long quiet_NaN()
Definition: limits_gcc3.h:1605
#define __glibcpp_float_has_denorm_loss
Definition: limits_gcc3.h:660
static _Tp signaling_NaN()
Definition: limits_gcc3.h:997
#define __glibcpp_float_has_quiet_NaN
Definition: limits_gcc3.h:648
static _Tp round_error()
Definition: limits_gcc3.h:994
#define __glibcpp_signed_int_digits10
Definition: limits_gcc3.h:428
static const bool is_specialized
Definition: limits_gcc3.h:959
#define __glibcpp_long_double_is_modulo
Definition: limits_gcc3.h:920
#define __glibcpp_long_double_infinity
Definition: limits_gcc3.h:896
static unsigned char infinity()
Definition: limits_gcc3.h:1209
#define __glibcpp_long_double_is_iec559
Definition: limits_gcc3.h:912
STL namespace.
float_round_style
Definition: limits_gcc3.h:938
#define __glibcpp_long_double_has_denorm_loss
Definition: limits_gcc3.h:892
#define __glibcpp_signed_long_long_digits10
Definition: limits_gcc3.h:531
static const float_round_style round_style
Definition: limits_gcc3.h:985
#define __glibcpp_unsigned_char_digits
Definition: limits_gcc3.h:307
static const bool has_denorm_loss
Definition: limits_gcc3.h:977
static unsigned long epsilon()
Definition: limits_gcc3.h:1587
#define __glibcpp_signed_int_digits
Definition: limits_gcc3.h:427
#define __glibcpp_double_signaling_NaN
Definition: limits_gcc3.h:776
#define __glibcpp_unsigned_long_long_max
Definition: limits_gcc3.h:534
static const bool tinyness_before
Definition: limits_gcc3.h:984
static unsigned char denorm_min()
Definition: limits_gcc3.h:1215
#define __glibcpp_signed_char_is_modulo
Definition: limits_gcc3.h:298
#define __glibcpp_float_has_signaling_NaN
Definition: limits_gcc3.h:652
#define __glibcpp_unsigned_long_traps
Definition: limits_gcc3.h:449
#define __glibcpp_bool_digits
Definition: limits_gcc3.h:286
#define __glibcpp_long_double_has_denorm
Definition: limits_gcc3.h:888
static long double round_error()
Definition: limits_gcc3.h:1911
static unsigned long long round_error()
Definition: limits_gcc3.h:1701
#define __glibcpp_signed_long_digits10
Definition: limits_gcc3.h:475
static unsigned long long quiet_NaN()
Definition: limits_gcc3.h:1717
#define __glibcpp_char_traps
Definition: limits_gcc3.h:169
#define __glibcpp_unsigned_short_max
Definition: limits_gcc3.h:374
#define __glibcpp_long_double_signaling_NaN
Definition: limits_gcc3.h:904
#define __glibcpp_long_double_round_style
Definition: limits_gcc3.h:932
#define __glibcpp_unsigned_int_digits10
Definition: limits_gcc3.h:432
#define __glibcpp_signed_short_digits10
Definition: limits_gcc3.h:372
static signed char signaling_NaN()
Definition: limits_gcc3.h:1156
static long double denorm_min()
Definition: limits_gcc3.h:1934
#define __glibcpp_signed_long_digits
Definition: limits_gcc3.h:474
#define __glibcpp_double_round_style
Definition: limits_gcc3.h:804
static signed char round_error()
Definition: limits_gcc3.h:1138
#define __glibcpp_char_digits
Definition: limits_gcc3.h:348
static const bool has_infinity
Definition: limits_gcc3.h:973
#define __glibcpp_signed_char_digits10
Definition: limits_gcc3.h:304
static unsigned long long epsilon()
Definition: limits_gcc3.h:1699
#define __glibcpp_float_quiet_NaN
Definition: limits_gcc3.h:668
static unsigned long long infinity()
Definition: limits_gcc3.h:1715
#define __glibcpp_float_round_style
Definition: limits_gcc3.h:700
#define __glibcpp_unsigned_int_max
Definition: limits_gcc3.h:430
static const bool has_quiet_NaN
Definition: limits_gcc3.h:974
#define __glibcpp_unsigned_char_traps
Definition: limits_gcc3.h:293
static unsigned int signaling_NaN()
Definition: limits_gcc3.h:1495
#define __glibcpp_unsigned_long_digits10
Definition: limits_gcc3.h:479
#define __glibcpp_char_min
Definition: limits_gcc3.h:346
#define __glibcpp_signed_int_min
Definition: limits_gcc3.h:425
static unsigned char epsilon()
Definition: limits_gcc3.h:1193
#define __glibcpp_signed_int_is_modulo
Definition: limits_gcc3.h:404
static wchar_t signaling_NaN()
Definition: limits_gcc3.h:1268
static unsigned short signaling_NaN()
Definition: limits_gcc3.h:1383
#define __glibcpp_unsigned_long_long_digits10
Definition: limits_gcc3.h:536
#define __glibcpp_char_max
Definition: limits_gcc3.h:347
static const int digits
Definition: limits_gcc3.h:961
static signed char quiet_NaN()
Definition: limits_gcc3.h:1154
#define __glibcpp_signed_short_digits
Definition: limits_gcc3.h:371
#define __glibcpp_signed_long_traps
Definition: limits_gcc3.h:448
#define __glibcpp_float_has_infinity
Definition: limits_gcc3.h:644
#define __glibcpp_unsigned_short_digits
Definition: limits_gcc3.h:375
#define __glibcpp_wchar_t_is_signed
Definition: limits_gcc3.h:153
#define __glibcpp_unsigned_long_digits
Definition: limits_gcc3.h:478
static _Tp quiet_NaN()
Definition: limits_gcc3.h:996
#define __glibcpp_double_denorm_min
Definition: limits_gcc3.h:780
#define __glibcpp_signed_int_max
Definition: limits_gcc3.h:426
#define __glibcpp_double_has_quiet_NaN
Definition: limits_gcc3.h:752
static unsigned long signaling_NaN()
Definition: limits_gcc3.h:1607
#define __glibcpp_signed_int_traps
Definition: limits_gcc3.h:401
#define __glibcpp_float_signaling_NaN
Definition: limits_gcc3.h:672
float_denorm_style
Definition: limits_gcc3.h:947
#define __glibcpp_wchar_t_traps
Definition: limits_gcc3.h:544
static _Tp min()
Definition: limits_gcc3.h:991
#define __glibcpp_long_double_denorm_min
Definition: limits_gcc3.h:908
static const bool traps
Definition: limits_gcc3.h:983
static long double signaling_NaN()
Definition: limits_gcc3.h:1932
#define __glibcpp_float_is_modulo
Definition: limits_gcc3.h:688
static long long signaling_NaN()
Definition: limits_gcc3.h:1662
#define __glibcpp_long_double_has_infinity
Definition: limits_gcc3.h:876
#define __glibcpp_float_traps
Definition: limits_gcc3.h:692
static const bool is_iec559
Definition: limits_gcc3.h:979
#define __glibcpp_plain_char_is_signed
Definition: limits_gcc3.h:138
#define __glibcpp_signed_long_long_min
Definition: limits_gcc3.h:528
#define __glibcpp_float_denorm_min
Definition: limits_gcc3.h:676
static unsigned short quiet_NaN()
Definition: limits_gcc3.h:1381
#define __glibcpp_signed_short_traps
Definition: limits_gcc3.h:354
static const bool is_exact
Definition: limits_gcc3.h:965
#define __glibcpp_double_is_iec559
Definition: limits_gcc3.h:784
static unsigned long round_error()
Definition: limits_gcc3.h:1589
#define __glibcpp_signed_long_max
Definition: limits_gcc3.h:473
static unsigned int quiet_NaN()
Definition: limits_gcc3.h:1493
#define __glibcpp_char_digits10
Definition: limits_gcc3.h:349
#define __glibcpp_long_double_has_quiet_NaN
Definition: limits_gcc3.h:880
#define __glibcpp_signed_long_long_is_modulo
Definition: limits_gcc3.h:498
#define __glibcpp_signed_long_min
Definition: limits_gcc3.h:472
static unsigned char signaling_NaN()
Definition: limits_gcc3.h:1213
static unsigned int infinity()
Definition: limits_gcc3.h:1491
#define __glibcpp_unsigned_short_digits10
Definition: limits_gcc3.h:376
static const bool is_integer
Definition: limits_gcc3.h:964
static _Tp infinity()
Definition: limits_gcc3.h:995
#define __glibcpp_double_has_signaling_NaN
Definition: limits_gcc3.h:756
static signed char denorm_min()
Definition: limits_gcc3.h:1158
static _Tp epsilon()
Definition: limits_gcc3.h:993
static const bool is_modulo
Definition: limits_gcc3.h:981
#define __glibcpp_unsigned_long_max
Definition: limits_gcc3.h:477
#define __glibcpp_signed_long_long_max
Definition: limits_gcc3.h:529
#define __glibcpp_signed_long_long_traps
Definition: limits_gcc3.h:532
static unsigned long long min()
Definition: limits_gcc3.h:1688
#define __glibcpp_unsigned_char_digits10
Definition: limits_gcc3.h:308
#define __glibcpp_wchar_t_digits10
Definition: limits_gcc3.h:587
static const bool is_signed
Definition: limits_gcc3.h:963
#define __glibcpp_double_has_denorm
Definition: limits_gcc3.h:760
#define __glibcpp_double_has_infinity
Definition: limits_gcc3.h:748
#define __glibcpp_long_double_traps
Definition: limits_gcc3.h:924
static unsigned short round_error()
Definition: limits_gcc3.h:1365
#define __glibcpp_wchar_t_is_modulo
Definition: limits_gcc3.h:546
#define __glibcpp_double_infinity
Definition: limits_gcc3.h:768
#define __glibcpp_float_is_iec559
Definition: limits_gcc3.h:680
#define __glibcpp_long_double_quiet_NaN
Definition: limits_gcc3.h:900
#define __glibcpp_wchar_t_digits
Definition: limits_gcc3.h:586
#define __glibcpp_float_has_denorm
Definition: limits_gcc3.h:656
#define __glibcpp_signed_char_max
Definition: limits_gcc3.h:302
#define __glibcpp_double_is_bounded
Definition: limits_gcc3.h:788
static const int radix
Definition: limits_gcc3.h:966
static const float_denorm_style has_denorm
Definition: limits_gcc3.h:976
#define __glibcpp_wchar_t_max
Definition: limits_gcc3.h:585
#define __glibcpp_signed_long_long_digits
Definition: limits_gcc3.h:530
static unsigned long long signaling_NaN()
Definition: limits_gcc3.h:1719
#define __glibcpp_double_has_denorm_loss
Definition: limits_gcc3.h:764
#define __glibcpp_long_double_is_bounded
Definition: limits_gcc3.h:916
#define __glibcpp_unsigned_char_max
Definition: limits_gcc3.h:306
#define __glibcpp_unsigned_int_digits
Definition: limits_gcc3.h:431
#define __glibcpp_signed_short_min
Definition: limits_gcc3.h:369
#define __glibcpp_signed_char_digits
Definition: limits_gcc3.h:303
static unsigned int round_error()
Definition: limits_gcc3.h:1477
static long long round_error()
Definition: limits_gcc3.h:1644
#define __glibcpp_float_tinyness_before
Definition: limits_gcc3.h:696
#define __glibcpp_unsigned_int_traps
Definition: limits_gcc3.h:402
static _Tp max()
Definition: limits_gcc3.h:992