OSDN Git Service

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