home *** CD-ROM | disk | FTP | other *** search
/ H4CK3R 14 / hacker14.iso / programacao / cwin / c.exe / $INSTDIR / include / c++ / limits < prev    next >
Encoding:
Text File  |  2003-12-15  |  70.6 KB  |  1,927 lines

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