OSDN Git Service

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