home *** CD-ROM | disk | FTP | other *** search
/ Magazyn Internet 2000 May / MICD_2000_05.iso / CBuilder5 / INSTALL / DATA1.CAB / Program_Built_Files / Include / limits.stl < prev    next >
Text File  |  2000-02-01  |  46KB  |  1,018 lines

  1. #ifndef __LIMITS_STL
  2. #define __LIMITS_STL
  3. #pragma option push -b -a8 -pc -Vx- -Ve- -w-inl -w-aus -w-sig
  4. // -*- C++ -*-
  5. #ifndef __STD_LIMITS
  6. #define __STD_LIMITS
  7.  
  8. /***************************************************************************
  9.  *
  10.  * limits - Declarations for the Standard Library limits class
  11.  *
  12.  ***************************************************************************
  13.  *
  14.  * Copyright (c) 1994-1999 Rogue Wave Software, Inc.  All Rights Reserved.
  15.  *
  16.  * This computer software is owned by Rogue Wave Software, Inc. and is
  17.  * protected by U.S. copyright laws and other laws and by international
  18.  * treaties.  This computer software is furnished by Rogue Wave Software,
  19.  * Inc. pursuant to a written license agreement and may be used, copied,
  20.  * transmitted, and stored only in accordance with the terms of such
  21.  * license and with the inclusion of the above copyright notice.  This
  22.  * computer software or any other copies thereof may not be provided or
  23.  * otherwise made available to any other person.
  24.  *
  25.  * U.S. Government Restricted Rights.  This computer software is provided
  26.  * with Restricted Rights.  Use, duplication, or disclosure by the
  27.  * Government is subject to restrictions as set forth in subparagraph (c)
  28.  * (1) (ii) of The Rights in Technical Data and Computer Software clause
  29.  * at DFARS 252.227-7013 or subparagraphs (c) (1) and (2) of the
  30.  * Commercial Computer Software û Restricted Rights at 48 CFR 52.227-19,
  31.  * as applicable.  Manufacturer is Rogue Wave Software, Inc., 5500
  32.  * Flatiron Parkway, Boulder, Colorado 80301 USA.
  33.  *
  34.  **************************************************************************/
  35.  
  36. #include <stdcomp.h>
  37. #include <rw/stddefs.h>
  38. #include <rw/math.h>
  39.  
  40. #ifndef _RWSTD_NO_NEW_HEADER
  41. #include <cfloat>
  42. #include <climits>
  43. #ifdef _RWSTD_REQUIRES_IEEEFP
  44. #include <ieeefp.h>    // for siemens
  45. #endif
  46. #else
  47. #include <float.h>
  48. #ifdef _RWSTD_REQUIRES_IEEEFP
  49. #include <ieeefp.h>    // for siemens
  50. #endif
  51. #include <limits.h>
  52. #endif
  53.  
  54. //
  55. // Turn off the warnings under the MSVC compiler that
  56. // say 'bool reserved for future use'
  57. //
  58. #ifdef _RWSTD_MSVC_BOOL_WARNING
  59. #pragma warning ( disable : 4237 )
  60. #endif
  61. #ifndef _RWSTD_NO_NAMESPACE
  62. namespace std {
  63. #endif
  64.  
  65. #if defined(__OS2__) || defined(__MFC_COMPAT__)
  66. #  ifdef max
  67. #     undef max
  68. #  endif
  69. #  ifdef min
  70. #     undef min
  71. #  endif
  72. #endif /*__OS2__ || __MFC_COMPAT__*/   
  73.  
  74.   enum float_round_style
  75.   {
  76.     round_indeterminate      = -1,
  77.     round_toward_zero         =  0,
  78.     round_to_nearest          =  1,
  79.     round_toward_infinity     =  2,
  80.     round_toward_neg_infinity =  3
  81.   };
  82.  
  83.   enum float_denorm_style
  84.   {
  85.     denorm_indeterminate = -1,
  86.     denorm_absent = 0,
  87.     denorm_present = 1
  88.   };
  89.  
  90. #if !defined(_RWSTD_NO_STI_SIMPLE)
  91. #define __RW_INIT(n) = n
  92. #else
  93. #define __RW_INIT(n) /**/
  94. #endif
  95.  
  96. //**********************************************************************
  97. //
  98. // Assumptions made in this implementation:
  99. //
  100. //   1) numeric_limits<int>::radix equals numeric_limits<T>::radix
  101. //      for all integral T specialized in this file.
  102. //
  103. //   2) numeric_limits<int>::is_modulo equals numeric_limits<T>::is_modulo
  104. //      for all signed integral T specialized in this file, except
  105. //      numeric_limits<bool>::is_modulo, which is assumed to be false.
  106. //
  107. //   3) numeric_limts<T>::traps == false for all builtin integral T.
  108. //
  109. // Does there exist a machine for which these aren't true?
  110. //
  111. //**********************************************************************
  112. //**********************************************************************
  113. //
  114. // If your compiler allows in-class initialization of static const data
  115. // members of integral type, then look for all lines having a comment of
  116. // the form
  117. //
  118. //       // VENDOR
  119. //
  120. // and set the value on that line to the proper one for your environment.
  121. //
  122. // If your compiler does NOT allow in-class initialization of static const
  123. // data members of integral type, then you'll need to set the values in
  124. // stdlib/src/limits/limits.cpp so they're properly archived into the
  125. // Standard Library.
  126. //
  127. //**********************************************************************
  128.   template <class T>
  129.   class _RWSTDExportTemplate numeric_limits;
  130.  
  131. //
  132. // Specialization for float.
  133. //
  134.  
  135.   _RWSTD_TEMPLATE
  136.   class _RWSTDExport numeric_limits<float>
  137.   {
  138.   public:
  139.  
  140.     static const bool _RWSTDExportTemplate is_specialized __RW_INIT(true);
  141.  
  142.     static inline float min ()  _RWSTD_INLINE_NO_THROW { return FLT_MIN; }
  143.     static inline float max ()  _RWSTD_INLINE_NO_THROW { return FLT_MAX; }
  144.  
  145.     static const _RWSTDExportTemplate int digits   __RW_INIT(FLT_MANT_DIG);
  146.     static const _RWSTDExportTemplate int digits10 __RW_INIT(FLT_DIG);
  147.  
  148.     static const bool _RWSTDExportTemplate is_signed  __RW_INIT(true);
  149.     static const bool _RWSTDExportTemplate is_integer __RW_INIT(false);
  150.     static const bool _RWSTDExportTemplate is_exact   __RW_INIT(false);
  151.  
  152.     static const  int _RWSTDExportTemplate radix __RW_INIT(FLT_RADIX);
  153.  
  154.     static inline float epsilon () _RWSTD_INLINE_NO_THROW { return FLT_EPSILON; }
  155.     static float _RWSTDExportTemplate round_error    () _RWSTD_INLINE_NO_THROW;
  156.  
  157.     static const int _RWSTDExportTemplate min_exponent   __RW_INIT(FLT_MIN_EXP);
  158.     static const int _RWSTDExportTemplate min_exponent10 __RW_INIT(FLT_MIN_10_EXP);
  159.     static const int _RWSTDExportTemplate max_exponent   __RW_INIT(FLT_MAX_EXP);
  160.     static const int _RWSTDExportTemplate max_exponent10 __RW_INIT(FLT_MAX_10_EXP);
  161.  
  162.     static const bool _RWSTDExportTemplate has_infinity      __RW_INIT(true);            // VENDOR
  163.     static const bool _RWSTDExportTemplate has_quiet_NaN     __RW_INIT(true);            // VENDOR
  164.     static const bool _RWSTDExportTemplate has_signaling_NaN __RW_INIT(true);            // VENDOR
  165.     static const float_denorm_style _RWSTDExportTemplate has_denorm        __RW_INIT(denorm_indeterminate);            // VENDOR
  166.     static const bool _RWSTDExportTemplate has_denorm_loss   __RW_INIT(false);            // VENDOR
  167.  
  168.     static float infinity      () _RWSTD_INLINE_NO_THROW;
  169.     static float quiet_NaN     () _RWSTD_INLINE_NO_THROW;
  170.     static float signaling_NaN () _RWSTD_INLINE_NO_THROW;
  171.     static float denorm_min    () _RWSTD_INLINE_NO_THROW;
  172.  
  173.     static const bool _RWSTDExportTemplate is_iec559  __RW_INIT(false);                   // VENDOR
  174.     static const bool _RWSTDExportTemplate is_bounded __RW_INIT(true);
  175.     static const bool _RWSTDExportTemplate is_modulo  __RW_INIT(false);                   // VENDOR
  176.  
  177.     static const bool _RWSTDExportTemplate traps           __RW_INIT(false);              // VENDOR
  178.     static const bool _RWSTDExportTemplate tinyness_before __RW_INIT(false);              // VENDOR
  179.  
  180. #ifndef _RWSTD_FLT_ROUNDS_IS_CONSTANT
  181.     static const float_round_style _RWSTDExportTemplate round_style;
  182. #else
  183.     static const float_round_style _RWSTDExportTemplate round_style __RW_INIT(_RWSTD_STATIC_CAST(float_round_style,FLT_ROUNDS));
  184. #endif
  185.   };
  186.  
  187. //
  188. // Specialization for double.
  189. //
  190.  
  191.   _RWSTD_TEMPLATE
  192.   class _RWSTDExport numeric_limits<double>
  193.   {
  194.   public:
  195.  
  196.     static const bool _RWSTDExportTemplate is_specialized  __RW_INIT(true);
  197.  
  198.     static inline double min ()  _RWSTD_INLINE_NO_THROW { return DBL_MIN; }
  199.     static inline double max ()  _RWSTD_INLINE_NO_THROW { return DBL_MAX; }
  200.  
  201.     static const int _RWSTDExportTemplate digits   __RW_INIT(DBL_MANT_DIG);
  202.     static const int _RWSTDExportTemplate digits10 __RW_INIT(DBL_DIG);
  203.  
  204.     static const bool _RWSTDExportTemplate is_signed  __RW_INIT(true);
  205.     static const bool _RWSTDExportTemplate is_integer __RW_INIT(false);
  206.     static const bool _RWSTDExportTemplate is_exact   __RW_INIT(false);
  207.  
  208.     static const int _RWSTDExportTemplate radix __RW_INIT(FLT_RADIX);
  209.  
  210.     static inline double epsilon () _RWSTD_INLINE_NO_THROW { return DBL_EPSILON; }
  211.     static double round_error    () _RWSTD_INLINE_NO_THROW;
  212.  
  213.     static const int _RWSTDExportTemplate min_exponent   __RW_INIT(DBL_MIN_EXP);
  214.     static const int _RWSTDExportTemplate min_exponent10 __RW_INIT(DBL_MIN_10_EXP);
  215.     static const int _RWSTDExportTemplate max_exponent   __RW_INIT(DBL_MAX_EXP);
  216.     static const int _RWSTDExportTemplate max_exponent10 __RW_INIT(DBL_MAX_10_EXP);
  217.  
  218.     static const bool _RWSTDExportTemplate has_infinity      __RW_INIT(true);            // VENDOR
  219.     static const bool _RWSTDExportTemplate has_quiet_NaN     __RW_INIT(true);            // VENDOR
  220.     static const bool _RWSTDExportTemplate has_signaling_NaN __RW_INIT(true);            // VENDOR
  221.     static const float_denorm_style _RWSTDExportTemplate has_denorm        __RW_INIT(denorm_indeterminate);            // VENDOR
  222.     static const bool _RWSTDExportTemplate has_denorm_loss   __RW_INIT(false);            // VENDOR
  223.  
  224.     static double infinity      () _RWSTD_INLINE_NO_THROW;
  225.     static double quiet_NaN     () _RWSTD_INLINE_NO_THROW;
  226.     static double signaling_NaN () _RWSTD_INLINE_NO_THROW;
  227.     static double denorm_min    () _RWSTD_INLINE_NO_THROW;
  228.  
  229.     static const bool _RWSTDExportTemplate is_iec559  __RW_INIT(false);                   // VENDOR
  230.     static const bool _RWSTDExportTemplate is_bounded __RW_INIT(true);
  231.     static const bool _RWSTDExportTemplate is_modulo  __RW_INIT(false);                   // VENDOR
  232.  
  233.     static const bool _RWSTDExportTemplate traps           __RW_INIT(false);              // VENDOR
  234.     static const bool _RWSTDExportTemplate tinyness_before __RW_INIT(false);              // VENDOR
  235.  
  236. #ifndef _RWSTD_FLT_ROUNDS_IS_CONSTANT
  237.     static const float_round_style _RWSTDExportTemplate round_style;
  238. #else
  239.     static const float_round_style _RWSTDExportTemplate round_style __RW_INIT(_RWSTD_STATIC_CAST(float_round_style,FLT_ROUNDS));
  240. #endif
  241.   };
  242.  
  243. //
  244. // Specialization for long double.
  245. //
  246.  
  247. #ifndef _RWSTD_NO_LONGDOUBLE
  248.  
  249.   _RWSTD_TEMPLATE
  250.   class _RWSTDExport numeric_limits<long double>
  251.   {
  252.   public:
  253.  
  254.     static const bool _RWSTDExportTemplate is_specialized __RW_INIT(true);
  255.  
  256.     static inline long double min () _RWSTD_INLINE_NO_THROW { return LDBL_MIN; } 
  257.     static inline long double max () _RWSTD_INLINE_NO_THROW { return LDBL_MAX; }
  258.  
  259.     static const int _RWSTDExportTemplate digits   __RW_INIT(LDBL_MANT_DIG);
  260.     static const int _RWSTDExportTemplate digits10 __RW_INIT(LDBL_DIG);
  261.  
  262.     static const bool _RWSTDExportTemplate is_signed  __RW_INIT(true);
  263.     static const bool _RWSTDExportTemplate is_integer __RW_INIT(false);
  264.     static const bool _RWSTDExportTemplate is_exact   __RW_INIT(false);
  265.  
  266.     static const int _RWSTDExportTemplate radix __RW_INIT(FLT_RADIX);
  267.  
  268.     static inline long double epsilon () _RWSTD_INLINE_NO_THROW { return LDBL_EPSILON; }
  269.     static long double round_error    () _RWSTD_INLINE_NO_THROW;
  270.  
  271.     static const int _RWSTDExportTemplate min_exponent   __RW_INIT(LDBL_MIN_EXP);
  272.     static const int _RWSTDExportTemplate min_exponent10 __RW_INIT(LDBL_MIN_10_EXP);
  273.     static const int _RWSTDExportTemplate max_exponent   __RW_INIT(LDBL_MAX_EXP);
  274.     static const int _RWSTDExportTemplate max_exponent10 __RW_INIT(LDBL_MAX_10_EXP);
  275.  
  276.     static const bool _RWSTDExportTemplate has_infinity      __RW_INIT(true);            // VENDOR
  277.     static const bool _RWSTDExportTemplate has_quiet_NaN     __RW_INIT(true);            // VENDOR
  278.     static const bool _RWSTDExportTemplate has_signaling_NaN __RW_INIT(true);            // VENDOR
  279.     static const float_denorm_style _RWSTDExportTemplate has_denorm        __RW_INIT(denorm_indeterminate);            // VENDOR
  280.     static const bool _RWSTDExportTemplate has_denorm_loss   __RW_INIT(false);            // VENDOR
  281.  
  282.     static long double _RWSTDExportTemplate infinity      () _RWSTD_INLINE_NO_THROW;
  283.     static long double _RWSTDExportTemplate quiet_NaN     () _RWSTD_INLINE_NO_THROW;
  284.     static long double _RWSTDExportTemplate signaling_NaN () _RWSTD_INLINE_NO_THROW;
  285.     static long double _RWSTDExportTemplate denorm_min    () _RWSTD_INLINE_NO_THROW;
  286.  
  287.     static const bool _RWSTDExportTemplate is_iec559  __RW_INIT(false);                   // VENDOR
  288.     static const bool _RWSTDExportTemplate is_bounded __RW_INIT(true);
  289.     static const bool _RWSTDExportTemplate is_modulo  __RW_INIT(false);                   // VENDOR
  290.  
  291.     static const bool _RWSTDExportTemplate traps           __RW_INIT(false);              // VENDOR
  292.     static const bool _RWSTDExportTemplate tinyness_before __RW_INIT(false);              // VENDOR
  293.  
  294. #ifndef _RWSTD_FLT_ROUNDS_IS_CONSTANT
  295.     static const float_round_style _RWSTDExportTemplate round_style;
  296. #else
  297.     static const float_round_style _RWSTDExportTemplate round_style __RW_INIT(_RWSTD_STATIC_CAST(float_round_style,FLT_ROUNDS));
  298. #endif
  299.   };
  300. #endif /* _RWSTD_NO_LONGDOUBLE */
  301.  
  302. //
  303. // Specialization for int.
  304. //
  305.  
  306.   _RWSTD_TEMPLATE
  307.   class _RWSTDExport numeric_limits<int>
  308.   {
  309.   public:
  310.  
  311.     static const bool _RWSTDExportTemplate is_specialized __RW_INIT(true);
  312.  
  313.     static inline int min ()  _RWSTD_INLINE_NO_THROW { return INT_MIN; }
  314.     static inline int max ()  _RWSTD_INLINE_NO_THROW { return INT_MAX; }
  315.  
  316.     static const int _RWSTDExportTemplate digits   __RW_INIT(CHAR_BIT*sizeof(int)-1);
  317.     //    static const int _RWSTDExportTemplate digits10 __RW_INIT(int(digits/3.321928095));
  318.     static const int _RWSTDExportTemplate digits10;
  319.  
  320.     static const bool _RWSTDExportTemplate is_signed  __RW_INIT(true);
  321.     static const bool _RWSTDExportTemplate is_integer __RW_INIT(true);
  322.     static const bool _RWSTDExportTemplate is_exact   __RW_INIT(true);
  323.  
  324.     static const int _RWSTDExportTemplate radix __RW_INIT(2);                             // VENDOR
  325.  
  326.     static inline int epsilon     () _RWSTD_INLINE_NO_THROW { return 0; }
  327.     static inline int round_error () _RWSTD_INLINE_NO_THROW { return 0; }
  328.  
  329.     static const int _RWSTDExportTemplate min_exponent   __RW_INIT(0);
  330.     static const int _RWSTDExportTemplate min_exponent10 __RW_INIT(0);
  331.     static const int _RWSTDExportTemplate max_exponent   __RW_INIT(0);
  332.     static const int _RWSTDExportTemplate max_exponent10 __RW_INIT(0);
  333.  
  334.     static const bool _RWSTDExportTemplate has_infinity      __RW_INIT(false);
  335.     static const bool _RWSTDExportTemplate has_quiet_NaN     __RW_INIT(false);
  336.     static const bool _RWSTDExportTemplate has_signaling_NaN __RW_INIT(false);
  337.     static const float_denorm_style _RWSTDExportTemplate has_denorm        __RW_INIT(denorm_absent);
  338.     static const bool _RWSTDExportTemplate has_denorm_loss   __RW_INIT(false);
  339.  
  340.     static inline int _RWSTDExportTemplate infinity      () _RWSTD_INLINE_NO_THROW { return 0;     }
  341.     static inline int _RWSTDExportTemplate quiet_NaN     () _RWSTD_INLINE_NO_THROW { return 0;     }
  342.     static inline int _RWSTDExportTemplate signaling_NaN () _RWSTD_INLINE_NO_THROW { return 0;     }
  343.     static inline int _RWSTDExportTemplate denorm_min    () _RWSTD_INLINE_NO_THROW { return min(); }
  344.  
  345.     static const bool _RWSTDExportTemplate is_iec559  __RW_INIT(false);
  346.     static const bool _RWSTDExportTemplate is_bounded __RW_INIT(true);
  347.     static const bool _RWSTDExportTemplate is_modulo  __RW_INIT(false);                   // VENDOR
  348.  
  349.     static const bool _RWSTDExportTemplate traps           __RW_INIT(false);
  350.     static const bool _RWSTDExportTemplate tinyness_before __RW_INIT(false);
  351.  
  352.     static const float_round_style _RWSTDExportTemplate round_style __RW_INIT(round_toward_zero); 
  353.   };
  354.  
  355. #ifndef _RWSTD_NO_OVERLOAD_WCHAR
  356.  
  357.   _RWSTD_TEMPLATE
  358.   class _RWSTDExport numeric_limits<wchar_t>
  359.   {
  360.   public:
  361.  
  362.     static const bool _RWSTDExportTemplate is_specialized __RW_INIT(true);
  363.  
  364.     static wchar_t min () _RWSTD_INLINE_NO_THROW;
  365.     static wchar_t max () _RWSTD_INLINE_NO_THROW;
  366.  
  367.     static const bool _RWSTDExportTemplate is_signed  __RW_INIT(true);                    // VENDOR
  368.  
  369.     static const int _RWSTDExportTemplate digits   __RW_INIT(is_signed ? CHAR_BIT*sizeof(wchar_t) - 1 : CHAR_BIT*sizeof(wchar_t));
  370.     //    static const int _RWSTDExportTemplate digits10 __RW_INIT(int(digits/3.321928095));
  371.     static const int _RWSTDExportTemplate digits10;
  372.  
  373.     static const bool _RWSTDExportTemplate is_integer __RW_INIT(true);
  374.     static const bool _RWSTDExportTemplate is_exact   __RW_INIT(true);
  375.  
  376.     static const int _RWSTDExportTemplate radix __RW_INIT(numeric_limits<int>::radix);
  377.  
  378.     static inline wchar_t epsilon     () _RWSTD_INLINE_NO_THROW { return 0; }
  379.     static inline wchar_t round_error () _RWSTD_INLINE_NO_THROW { return 0; }
  380.  
  381.     static const int _RWSTDExportTemplate min_exponent   __RW_INIT(0);
  382.     static const int _RWSTDExportTemplate min_exponent10 __RW_INIT(0);
  383.     static const int _RWSTDExportTemplate max_exponent   __RW_INIT(0);
  384.     static const int _RWSTDExportTemplate max_exponent10 __RW_INIT(0);
  385.  
  386.     static const bool _RWSTDExportTemplate has_infinity      __RW_INIT(false);
  387.     static const bool _RWSTDExportTemplate has_quiet_NaN     __RW_INIT(false);
  388.     static const bool _RWSTDExportTemplate has_signaling_NaN __RW_INIT(false);
  389.     static const float_denorm_style _RWSTDExportTemplate has_denorm        __RW_INIT(denorm_absent);
  390.     static const bool _RWSTDExportTemplate has_denorm_loss   __RW_INIT(false);
  391.  
  392.     static inline wchar_t _RWSTDExportTemplate infinity      () _RWSTD_INLINE_NO_THROW { return 0;     }
  393.     static inline wchar_t _RWSTDExportTemplate quiet_NaN     () _RWSTD_INLINE_NO_THROW { return 0;     }
  394.     static inline wchar_t _RWSTDExportTemplate signaling_NaN () _RWSTD_INLINE_NO_THROW { return 0;     }
  395.     static inline wchar_t _RWSTDExportTemplate denorm_min    () _RWSTD_INLINE_NO_THROW { return min(); }
  396.  
  397.     static const bool _RWSTDExportTemplate is_iec559  __RW_INIT(false);
  398.     static const bool _RWSTDExportTemplate is_bounded __RW_INIT(true);
  399.     static const bool _RWSTDExportTemplate is_modulo  __RW_INIT(is_signed ? numeric_limits<int>::is_modulo : true);
  400.  
  401.     static const bool _RWSTDExportTemplate traps           __RW_INIT(false);
  402.     static const bool _RWSTDExportTemplate tinyness_before __RW_INIT(false);
  403.  
  404.     static const float_round_style _RWSTDExportTemplate round_style __RW_INIT(round_toward_zero);
  405.   };
  406. #endif /*!_RWSTD_NO_OVERLOAD_WCHAR*/
  407.  
  408. //**********************************************************************
  409. //
  410. // There are no VENDOR-settable values beyond this point.
  411. //
  412. //**********************************************************************
  413.  
  414. //
  415. // Specialization for short.
  416. //
  417.  
  418.   _RWSTD_TEMPLATE
  419.   class _RWSTDExport numeric_limits<short>
  420.   {
  421.   public:
  422.  
  423.     static const bool _RWSTDExportTemplate is_specialized __RW_INIT(true);
  424.  
  425.     static inline short min ()  _RWSTD_INLINE_NO_THROW { return SHRT_MIN; }
  426.     static inline short max ()  _RWSTD_INLINE_NO_THROW { return SHRT_MAX; }
  427.  
  428.     static const int _RWSTDExportTemplate digits   __RW_INIT(CHAR_BIT*sizeof(short)-1);
  429.     //    static const int _RWSTDExportTemplate digits10 __RW_INIT(int(digits/3.321928095));
  430.     static const int _RWSTDExportTemplate digits10;
  431.  
  432.     static const bool _RWSTDExportTemplate is_signed  __RW_INIT(true);
  433.     static const bool _RWSTDExportTemplate is_integer __RW_INIT(true);
  434.     static const bool _RWSTDExportTemplate is_exact   __RW_INIT(true);
  435.  
  436.     static const int _RWSTDExportTemplate radix __RW_INIT(numeric_limits<int>::radix);
  437.  
  438.     static inline short epsilon     () _RWSTD_INLINE_NO_THROW { return 0; }
  439.     static inline short round_error () _RWSTD_INLINE_NO_THROW { return 0; }
  440.  
  441.     static const int _RWSTDExportTemplate min_exponent   __RW_INIT(0);
  442.     static const int _RWSTDExportTemplate min_exponent10 __RW_INIT(0);
  443.     static const int _RWSTDExportTemplate max_exponent   __RW_INIT(0);
  444.     static const int _RWSTDExportTemplate max_exponent10 __RW_INIT(0);
  445.  
  446.     static const bool _RWSTDExportTemplate has_infinity      __RW_INIT(false);
  447.     static const bool _RWSTDExportTemplate has_quiet_NaN     __RW_INIT(false);
  448.     static const bool _RWSTDExportTemplate has_signaling_NaN __RW_INIT(false);
  449.     static const float_denorm_style _RWSTDExportTemplate has_denorm        __RW_INIT(denorm_absent);
  450.     static const bool _RWSTDExportTemplate has_denorm_loss   __RW_INIT(false);
  451.     static inline short _RWSTDExportTemplate infinity      () _RWSTD_INLINE_NO_THROW { return 0;     }
  452.     static inline short _RWSTDExportTemplate quiet_NaN     () _RWSTD_INLINE_NO_THROW { return 0;     } 
  453.     static inline short _RWSTDExportTemplate signaling_NaN () _RWSTD_INLINE_NO_THROW { return 0;     }
  454.     static inline short _RWSTDExportTemplate denorm_min    () _RWSTD_INLINE_NO_THROW { return min(); }
  455.  
  456.     static const bool _RWSTDExportTemplate is_iec559  __RW_INIT(false);
  457.     static const bool _RWSTDExportTemplate is_bounded __RW_INIT(true);
  458.     static const bool _RWSTDExportTemplate is_modulo  __RW_INIT(numeric_limits<int>::is_modulo);
  459.  
  460.     static const bool _RWSTDExportTemplate traps           __RW_INIT(false);
  461.     static const bool _RWSTDExportTemplate tinyness_before __RW_INIT(false);
  462.  
  463.     static const float_round_style _RWSTDExportTemplate round_style __RW_INIT(round_toward_zero);
  464.   };
  465.  
  466. //
  467. // Specialization for unsigned short.
  468. //
  469.  
  470.   _RWSTD_TEMPLATE
  471.   class _RWSTDExport numeric_limits<unsigned short>
  472.   {
  473.   public:
  474.  
  475.     static const bool _RWSTDExportTemplate is_specialized __RW_INIT(true);
  476.  
  477.     static inline unsigned short min ()  _RWSTD_INLINE_NO_THROW { return 0;         }
  478.     static inline unsigned short max ()  _RWSTD_INLINE_NO_THROW { return USHRT_MAX; }
  479.  
  480.     static const int _RWSTDExportTemplate digits   __RW_INIT(CHAR_BIT*sizeof(unsigned short));
  481.     //    static const int _RWSTDExportTemplate digits10 __RW_INIT(int(digits/3.321928095));
  482.     static const int _RWSTDExportTemplate digits10;
  483.  
  484.     static const bool _RWSTDExportTemplate is_signed  __RW_INIT(false);
  485.     static const bool _RWSTDExportTemplate is_integer __RW_INIT(true);
  486.     static const bool _RWSTDExportTemplate is_exact   __RW_INIT(true);
  487.  
  488.     static const int _RWSTDExportTemplate radix __RW_INIT(numeric_limits<int>::radix);
  489.  
  490.     static inline unsigned short epsilon     () _RWSTD_INLINE_NO_THROW { return 0; }
  491.     static inline unsigned short round_error () _RWSTD_INLINE_NO_THROW { return 0; }
  492.  
  493.     static const int _RWSTDExportTemplate min_exponent   __RW_INIT(0);
  494.     static const int _RWSTDExportTemplate min_exponent10 __RW_INIT(0);
  495.     static const int _RWSTDExportTemplate max_exponent   __RW_INIT(0);
  496.     static const int _RWSTDExportTemplate max_exponent10 __RW_INIT(0);
  497.  
  498.     static const bool _RWSTDExportTemplate has_infinity      __RW_INIT(false);
  499.     static const bool _RWSTDExportTemplate has_quiet_NaN     __RW_INIT(false);
  500.     static const bool _RWSTDExportTemplate has_signaling_NaN __RW_INIT(false);
  501.     static const float_denorm_style _RWSTDExportTemplate has_denorm        __RW_INIT(denorm_absent);
  502.     static const bool _RWSTDExportTemplate has_denorm_loss   __RW_INIT(false);
  503.  
  504.     static inline unsigned short infinity      () _RWSTD_INLINE_NO_THROW { return 0;     }
  505.     static inline unsigned short quiet_NaN     () _RWSTD_INLINE_NO_THROW { return 0;     }
  506.     static inline unsigned short signaling_NaN () _RWSTD_INLINE_NO_THROW { return 0;     }
  507.     static inline unsigned short denorm_min    () _RWSTD_INLINE_NO_THROW { return min(); }
  508.  
  509.     static const bool _RWSTDExportTemplate is_iec559  __RW_INIT(false);
  510.     static const bool _RWSTDExportTemplate is_bounded __RW_INIT(true);
  511.     static const bool _RWSTDExportTemplate is_modulo  __RW_INIT(true);
  512.  
  513.     static const bool _RWSTDExportTemplate traps           __RW_INIT(false);
  514.     static const bool _RWSTDExportTemplate tinyness_before __RW_INIT(false);
  515.  
  516.     static const float_round_style _RWSTDExportTemplate round_style __RW_INIT(round_toward_zero);
  517.   };
  518.  
  519. //
  520. // Specialization for unsigned int.
  521. //
  522.  
  523.   _RWSTD_TEMPLATE
  524.   class _RWSTDExport numeric_limits<unsigned int>
  525.   {
  526.   public:
  527.  
  528.     static const bool _RWSTDExportTemplate is_specialized __RW_INIT(true);
  529.  
  530.     static inline unsigned int min ()  _RWSTD_INLINE_NO_THROW { return 0;        }
  531.     static inline unsigned int max ()  _RWSTD_INLINE_NO_THROW { return UINT_MAX; }
  532.  
  533.     static const int _RWSTDExportTemplate digits   __RW_INIT(CHAR_BIT*sizeof(unsigned int));
  534.     //    static const int _RWSTDExportTemplate digits10 __RW_INIT(int(digits/3.321928095));
  535.     static const int _RWSTDExportTemplate digits10;
  536.  
  537.     static const bool _RWSTDExportTemplate is_signed  __RW_INIT(false);
  538.     static const bool _RWSTDExportTemplate is_integer __RW_INIT(true);
  539.     static const bool _RWSTDExportTemplate is_exact   __RW_INIT(true);
  540.  
  541.     static const int _RWSTDExportTemplate radix __RW_INIT(numeric_limits<int>::radix);
  542.  
  543.     static inline unsigned int epsilon     () _RWSTD_INLINE_NO_THROW { return 0; }
  544.     static inline unsigned int round_error () _RWSTD_INLINE_NO_THROW { return 0; }
  545.  
  546.     static const int _RWSTDExportTemplate min_exponent   __RW_INIT(0);
  547.     static const int _RWSTDExportTemplate min_exponent10 __RW_INIT(0);
  548.     static const int _RWSTDExportTemplate max_exponent   __RW_INIT(0);
  549.     static const int _RWSTDExportTemplate max_exponent10 __RW_INIT(0);
  550.  
  551.     static const bool _RWSTDExportTemplate has_infinity      __RW_INIT(false);
  552.     static const bool _RWSTDExportTemplate has_quiet_NaN     __RW_INIT(false);
  553.     static const bool _RWSTDExportTemplate has_signaling_NaN __RW_INIT(false);
  554.     static const float_denorm_style _RWSTDExportTemplate has_denorm        __RW_INIT(denorm_absent);
  555.     static const bool _RWSTDExportTemplate has_denorm_loss   __RW_INIT(false);
  556.  
  557.     static inline unsigned int infinity      () _RWSTD_INLINE_NO_THROW { return 0;     }
  558.     static inline unsigned int quiet_NaN     () _RWSTD_INLINE_NO_THROW { return 0;     }
  559.     static inline unsigned int signaling_NaN () _RWSTD_INLINE_NO_THROW { return 0;     }
  560.     static inline unsigned int denorm_min    () _RWSTD_INLINE_NO_THROW { return min(); }
  561.  
  562.     static const bool _RWSTDExportTemplate is_iec559  __RW_INIT(false);
  563.     static const bool _RWSTDExportTemplate is_bounded __RW_INIT(true);
  564.     static const bool _RWSTDExportTemplate is_modulo  __RW_INIT(true);
  565.  
  566.     static const bool _RWSTDExportTemplate traps           __RW_INIT(false);
  567.     static const bool _RWSTDExportTemplate tinyness_before __RW_INIT(false);
  568.  
  569.     static const float_round_style _RWSTDExportTemplate round_style __RW_INIT(round_toward_zero);
  570.   };
  571.  
  572. //
  573. // Specialization for long.
  574. //
  575.  
  576.   _RWSTD_TEMPLATE
  577.   class _RWSTDExport numeric_limits<long>
  578.   {
  579.   public:
  580.  
  581.     static const bool _RWSTDExportTemplate is_specialized __RW_INIT(true);
  582.  
  583.     static inline long min ()  _RWSTD_INLINE_NO_THROW { return LONG_MIN; }
  584.     static inline long max ()  _RWSTD_INLINE_NO_THROW { return LONG_MAX; }
  585.  
  586.     static const int _RWSTDExportTemplate digits   __RW_INIT(CHAR_BIT*sizeof(long)-1);
  587.     //    static const int _RWSTDExportTemplate digits10 __RW_INIT(int(digits/3.321928095));
  588.     static const int _RWSTDExportTemplate digits10;
  589.  
  590.     static const bool _RWSTDExportTemplate is_signed  __RW_INIT(true);
  591.     static const bool _RWSTDExportTemplate is_integer __RW_INIT(true);
  592.     static const bool _RWSTDExportTemplate is_exact   __RW_INIT(true);
  593.  
  594.     static const int _RWSTDExportTemplate radix __RW_INIT(numeric_limits<int>::radix);
  595.  
  596.     static inline long epsilon     () _RWSTD_INLINE_NO_THROW { return 0; }
  597.     static inline long round_error () _RWSTD_INLINE_NO_THROW { return 0; }
  598.  
  599.     static const int _RWSTDExportTemplate min_exponent   __RW_INIT(0);
  600.     static const int _RWSTDExportTemplate min_exponent10 __RW_INIT(0); 
  601.     static const int _RWSTDExportTemplate max_exponent   __RW_INIT(0);
  602.     static const int _RWSTDExportTemplate max_exponent10 __RW_INIT(0);
  603.  
  604.     static const bool _RWSTDExportTemplate has_infinity      __RW_INIT(false);
  605.     static const bool _RWSTDExportTemplate has_quiet_NaN     __RW_INIT(false);
  606.     static const bool _RWSTDExportTemplate has_signaling_NaN __RW_INIT(false);
  607.     static const float_denorm_style _RWSTDExportTemplate has_denorm        __RW_INIT(denorm_absent);
  608.     static const bool _RWSTDExportTemplate has_denorm_loss   __RW_INIT(false);
  609.  
  610.     static inline long infinity      () _RWSTD_INLINE_NO_THROW { return 0;     }
  611.     static inline long quiet_NaN     () _RWSTD_INLINE_NO_THROW { return 0;     }
  612.     static inline long signaling_NaN () _RWSTD_INLINE_NO_THROW { return 0;     }
  613.     static inline long denorm_min    () _RWSTD_INLINE_NO_THROW { return min(); }
  614.  
  615.     static const bool _RWSTDExportTemplate is_iec559  __RW_INIT(false);
  616.     static const bool _RWSTDExportTemplate is_bounded __RW_INIT(true);
  617.     static const bool _RWSTDExportTemplate is_modulo  __RW_INIT(numeric_limits<int>::is_modulo);
  618.  
  619.     static const bool _RWSTDExportTemplate traps           __RW_INIT(false);
  620.     static const bool _RWSTDExportTemplate tinyness_before __RW_INIT(false);
  621.  
  622.     static const float_round_style _RWSTDExportTemplate round_style __RW_INIT(round_toward_zero);
  623.   };
  624.  
  625. //
  626. // Specialization for unsigned long.
  627. //
  628.  
  629.   _RWSTD_TEMPLATE
  630.   class _RWSTDExport numeric_limits<unsigned long>
  631.   {
  632.   public:
  633.  
  634.     static const bool _RWSTDExportTemplate is_specialized __RW_INIT(true);
  635.  
  636.     static inline unsigned long min ()  _RWSTD_INLINE_NO_THROW { return 0;         }
  637.     static inline unsigned long max ()  _RWSTD_INLINE_NO_THROW { return ULONG_MAX; }
  638.  
  639.     static const int _RWSTDExportTemplate digits   __RW_INIT(CHAR_BIT*sizeof(unsigned long));
  640.     //    static const int _RWSTDExportTemplate digits10 __RW_INIT(int(digits/3.321928095));
  641.     static const int _RWSTDExportTemplate digits10;
  642.  
  643.     static const bool _RWSTDExportTemplate is_signed  __RW_INIT(false);
  644.     static const bool _RWSTDExportTemplate is_integer __RW_INIT(true);
  645.     static const bool _RWSTDExportTemplate is_exact   __RW_INIT(true);
  646.  
  647.     static const int _RWSTDExportTemplate radix __RW_INIT(numeric_limits<int>::radix);
  648.  
  649.     static inline unsigned long epsilon     () _RWSTD_INLINE_NO_THROW { return 0; }
  650.     static inline unsigned long round_error () _RWSTD_INLINE_NO_THROW { return 0; }
  651.  
  652.     static const int _RWSTDExportTemplate min_exponent   __RW_INIT(0);
  653.     static const int _RWSTDExportTemplate min_exponent10 __RW_INIT(0); 
  654.     static const int _RWSTDExportTemplate max_exponent   __RW_INIT(0);
  655.     static const int _RWSTDExportTemplate max_exponent10 __RW_INIT(0);
  656.  
  657.     static const bool _RWSTDExportTemplate has_infinity      __RW_INIT(false);
  658.     static const bool _RWSTDExportTemplate has_quiet_NaN     __RW_INIT(false);
  659.     static const bool _RWSTDExportTemplate has_signaling_NaN __RW_INIT(false);
  660.     static const float_denorm_style _RWSTDExportTemplate has_denorm        __RW_INIT(denorm_absent);
  661.     static const bool _RWSTDExportTemplate has_denorm_loss   __RW_INIT(false);
  662.  
  663.     static inline unsigned long infinity      () _RWSTD_INLINE_NO_THROW { return 0;     }
  664.     static inline unsigned long quiet_NaN     () _RWSTD_INLINE_NO_THROW { return 0;     }
  665.     static inline unsigned long signaling_NaN () _RWSTD_INLINE_NO_THROW { return 0;     }
  666.     static inline unsigned long denorm_min    () _RWSTD_INLINE_NO_THROW { return min(); }
  667.  
  668.     static const bool _RWSTDExportTemplate is_iec559  __RW_INIT(false);
  669.     static const bool _RWSTDExportTemplate is_bounded __RW_INIT(true);
  670.     static const bool _RWSTDExportTemplate is_modulo  __RW_INIT(true);
  671.  
  672.     static const bool _RWSTDExportTemplate traps           __RW_INIT(false);
  673.     static const bool _RWSTDExportTemplate tinyness_before __RW_INIT(false);
  674.  
  675.     static const float_round_style _RWSTDExportTemplate round_style __RW_INIT(round_toward_zero);
  676.   };
  677.  
  678. //
  679. // Specialization for char.
  680. //
  681.  
  682.   _RWSTD_TEMPLATE
  683.   class _RWSTDExport numeric_limits<char>
  684.   {
  685.   public:
  686.  
  687.     static const bool _RWSTDExportTemplate is_specialized __RW_INIT(true);
  688.  
  689.     static inline char min ()  _RWSTD_INLINE_NO_THROW { return CHAR_MIN; }
  690.     static inline char max ()  _RWSTD_INLINE_NO_THROW { return CHAR_MAX; }
  691.  
  692.     static const bool _RWSTDExportTemplate is_signed  __RW_INIT(CHAR_MAX == SCHAR_MAX ? true : false);
  693.  
  694.     static const int _RWSTDExportTemplate digits   __RW_INIT(is_signed ? CHAR_BIT*sizeof(char) -1 : CHAR_BIT*sizeof(char));
  695.     //    static const int _RWSTDExportTemplate digits10 __RW_INIT(int(digits/3.321928095));
  696.     static const int _RWSTDExportTemplate digits10;
  697.  
  698.     static const bool _RWSTDExportTemplate is_integer __RW_INIT(true);
  699.     static const bool _RWSTDExportTemplate is_exact   __RW_INIT(true);
  700.  
  701.     static const int _RWSTDExportTemplate radix __RW_INIT(numeric_limits<int>::radix);
  702.  
  703.     static inline char epsilon     () _RWSTD_INLINE_NO_THROW { return 0; }
  704.     static inline char round_error () _RWSTD_INLINE_NO_THROW { return 0; }
  705.  
  706.     static const int _RWSTDExportTemplate min_exponent   __RW_INIT(0);
  707.     static const int _RWSTDExportTemplate min_exponent10 __RW_INIT(0); 
  708.     static const int _RWSTDExportTemplate max_exponent   __RW_INIT(0);
  709.     static const int _RWSTDExportTemplate max_exponent10 __RW_INIT(0);
  710.  
  711.     static const bool _RWSTDExportTemplate has_infinity      __RW_INIT(false);
  712.     static const bool _RWSTDExportTemplate has_quiet_NaN     __RW_INIT(false);
  713.     static const bool _RWSTDExportTemplate has_signaling_NaN __RW_INIT(false);
  714.     static const float_denorm_style _RWSTDExportTemplate has_denorm        __RW_INIT(denorm_absent);
  715.     static const bool _RWSTDExportTemplate has_denorm_loss   __RW_INIT(false);
  716.  
  717.     static inline char infinity      () _RWSTD_INLINE_NO_THROW { return 0;     }
  718.     static inline char quiet_NaN     () _RWSTD_INLINE_NO_THROW { return 0;     }
  719.     static inline char signaling_NaN () _RWSTD_INLINE_NO_THROW { return 0;     }
  720.     static inline char denorm_min    () _RWSTD_INLINE_NO_THROW { return min(); }
  721.     
  722.     static const bool _RWSTDExportTemplate is_iec559  __RW_INIT(false);
  723.     static const bool _RWSTDExportTemplate is_bounded __RW_INIT(true);
  724.     static const bool _RWSTDExportTemplate is_modulo  __RW_INIT(is_signed ? numeric_limits<int>::is_modulo : true);
  725.  
  726.     static const bool _RWSTDExportTemplate traps           __RW_INIT(false);
  727.     static const bool _RWSTDExportTemplate tinyness_before __RW_INIT(false);
  728.  
  729.     static const float_round_style _RWSTDExportTemplate round_style __RW_INIT(round_toward_zero);
  730.   };
  731.  
  732. //
  733. // Specialization for unsigned char.
  734. //
  735.  
  736.   _RWSTD_TEMPLATE
  737.   class _RWSTDExport numeric_limits<unsigned char>
  738.   {
  739.   public:
  740.  
  741.     static const bool _RWSTDExportTemplate is_specialized __RW_INIT(true);
  742.  
  743.     static inline unsigned char min ()  _RWSTD_INLINE_NO_THROW { return 0;         }
  744.     static inline unsigned char max ()  _RWSTD_INLINE_NO_THROW { return UCHAR_MAX; }
  745.  
  746.     static const int _RWSTDExportTemplate digits   __RW_INIT(CHAR_BIT*sizeof(unsigned char));
  747.     //    static const int _RWSTDExportTemplate digits10 __RW_INIT(int(digits/3.321928095)); 
  748.     static const int _RWSTDExportTemplate digits10;
  749.  
  750.     static const bool _RWSTDExportTemplate is_signed  __RW_INIT(false);
  751.     static const bool _RWSTDExportTemplate is_integer __RW_INIT(true);
  752.     static const bool _RWSTDExportTemplate is_exact   __RW_INIT(true);
  753.  
  754.     static const int _RWSTDExportTemplate radix __RW_INIT(numeric_limits<int>::radix);
  755.  
  756.     static inline unsigned char epsilon     () _RWSTD_INLINE_NO_THROW { return 0; }
  757.     static inline unsigned char round_error () _RWSTD_INLINE_NO_THROW { return 0; }
  758.  
  759.     static const int _RWSTDExportTemplate min_exponent   __RW_INIT(0);
  760.     static const int _RWSTDExportTemplate min_exponent10 __RW_INIT(0); 
  761.     static const int _RWSTDExportTemplate max_exponent   __RW_INIT(0);
  762.     static const int _RWSTDExportTemplate max_exponent10 __RW_INIT(0);
  763.  
  764.     static const bool _RWSTDExportTemplate has_infinity      __RW_INIT(false);
  765.     static const bool _RWSTDExportTemplate has_quiet_NaN     __RW_INIT(false);
  766.     static const bool _RWSTDExportTemplate has_signaling_NaN __RW_INIT(false);
  767.     static const float_denorm_style _RWSTDExportTemplate has_denorm        __RW_INIT(denorm_absent);
  768.     static const bool _RWSTDExportTemplate has_denorm_loss   __RW_INIT(false);
  769.  
  770.     static inline unsigned char infinity      () _RWSTD_INLINE_NO_THROW { return 0;     }
  771.     static inline unsigned char quiet_NaN     () _RWSTD_INLINE_NO_THROW { return 0;     }
  772.     static inline unsigned char signaling_NaN () _RWSTD_INLINE_NO_THROW { return 0;     }
  773.     static inline unsigned char denorm_min    () _RWSTD_INLINE_NO_THROW { return min(); }
  774.  
  775.     static const bool _RWSTDExportTemplate is_iec559  __RW_INIT(false);
  776.     static const bool _RWSTDExportTemplate is_bounded __RW_INIT(true);
  777.     static const bool _RWSTDExportTemplate is_modulo  __RW_INIT(true);
  778.  
  779.     static const bool _RWSTDExportTemplate traps           __RW_INIT(false);
  780.     static const bool _RWSTDExportTemplate tinyness_before __RW_INIT(false);
  781.  
  782.     static const float_round_style _RWSTDExportTemplate round_style __RW_INIT(round_toward_zero);
  783.   };
  784.  
  785. //
  786. // Specialization for signed char.
  787. //
  788.  
  789.   _RWSTD_TEMPLATE
  790.   class _RWSTDExport numeric_limits<signed char>
  791.   {
  792.   public:
  793.  
  794.     static const bool _RWSTDExportTemplate is_specialized __RW_INIT(true);
  795.  
  796.     static inline signed char min ()  _RWSTD_INLINE_NO_THROW { return SCHAR_MIN; }
  797.     static inline signed char max ()  _RWSTD_INLINE_NO_THROW { return SCHAR_MAX; }
  798.  
  799.     static const _RWSTDExportTemplate int digits   __RW_INIT(CHAR_BIT*sizeof(signed char)-1);
  800.     //    static const _RWSTDExportTemplate int digits10 __RW_INIT(int(digits/3.321928095));
  801.     static const _RWSTDExportTemplate int digits10;
  802.  
  803.     static const bool _RWSTDExportTemplate is_signed  __RW_INIT(true);
  804.     static const bool _RWSTDExportTemplate is_integer __RW_INIT(true);
  805.     static const bool _RWSTDExportTemplate is_exact   __RW_INIT(true);
  806.  
  807.     static const int _RWSTDExportTemplate radix __RW_INIT(numeric_limits<int>::radix);
  808.  
  809.     static inline signed char epsilon     () _RWSTD_INLINE_NO_THROW { return 0; }
  810.     static inline signed char round_error () _RWSTD_INLINE_NO_THROW { return 0; }
  811.  
  812.     static const int _RWSTDExportTemplate min_exponent   __RW_INIT(0);
  813.     static const int _RWSTDExportTemplate min_exponent10 __RW_INIT(0); 
  814.     static const int _RWSTDExportTemplate max_exponent   __RW_INIT(0);
  815.     static const int _RWSTDExportTemplate max_exponent10 __RW_INIT(0);
  816.  
  817.     static const bool _RWSTDExportTemplate has_infinity      __RW_INIT(false);
  818.     static const bool _RWSTDExportTemplate has_quiet_NaN     __RW_INIT(false);
  819.     static const bool _RWSTDExportTemplate has_signaling_NaN __RW_INIT(false);
  820.     static const float_denorm_style _RWSTDExportTemplate has_denorm        __RW_INIT(denorm_absent);
  821.     static const bool _RWSTDExportTemplate has_denorm_loss   __RW_INIT(false);
  822.  
  823.     static inline signed char infinity      () _RWSTD_INLINE_NO_THROW { return 0;     }
  824.     static inline signed char quiet_NaN     () _RWSTD_INLINE_NO_THROW { return 0;     }
  825.     static inline signed char signaling_NaN () _RWSTD_INLINE_NO_THROW { return 0;     }
  826.     static inline signed char denorm_min    () _RWSTD_INLINE_NO_THROW { return min(); }
  827.  
  828.     static const bool _RWSTDExportTemplate is_iec559  __RW_INIT(false);
  829.     static const bool _RWSTDExportTemplate is_bounded __RW_INIT(true);
  830.     static const bool _RWSTDExportTemplate is_modulo  __RW_INIT(numeric_limits<int>::is_modulo);
  831.  
  832.     static const bool _RWSTDExportTemplate traps           __RW_INIT(false);
  833.     static const bool _RWSTDExportTemplate tinyness_before __RW_INIT(false);
  834.  
  835.     static const float_round_style _RWSTDExportTemplate round_style __RW_INIT(round_toward_zero);
  836.   };
  837.  
  838. #ifndef _RWSTD_NO_BOOL
  839. //
  840. // Specialization for bool.
  841. //
  842.  
  843.   _RWSTD_TEMPLATE
  844.   class _RWSTDExport numeric_limits<bool>
  845.   {
  846.   public:
  847.  
  848.     static const bool _RWSTDExportTemplate is_specialized __RW_INIT(true);
  849.  
  850.     static inline bool min ()  _RWSTD_INLINE_NO_THROW { return false; }
  851.     static inline bool max ()  _RWSTD_INLINE_NO_THROW { return true;  }
  852.  
  853.     static const _RWSTDExportTemplate int digits   __RW_INIT(1);
  854.     static const _RWSTDExportTemplate int digits10 __RW_INIT(0);
  855.  
  856.     static const bool _RWSTDExportTemplate is_signed  __RW_INIT(false);
  857.     static const bool _RWSTDExportTemplate is_integer __RW_INIT(true);
  858.     static const bool _RWSTDExportTemplate is_exact   __RW_INIT(true);
  859.  
  860.     static const int _RWSTDExportTemplate radix __RW_INIT(numeric_limits<int>::radix);
  861.  
  862.     static inline bool epsilon     () _RWSTD_INLINE_NO_THROW { return 0; }
  863.     static inline bool round_error () _RWSTD_INLINE_NO_THROW { return 0; }
  864.  
  865.     static const int _RWSTDExportTemplate min_exponent   __RW_INIT(0);
  866.     static const int _RWSTDExportTemplate min_exponent10 __RW_INIT(0); 
  867.     static const int _RWSTDExportTemplate max_exponent   __RW_INIT(0);
  868.     static const int _RWSTDExportTemplate max_exponent10 __RW_INIT(0);
  869.  
  870.     static const bool _RWSTDExportTemplate has_infinity      __RW_INIT(false);
  871.     static const bool _RWSTDExportTemplate has_quiet_NaN     __RW_INIT(false);
  872.     static const bool _RWSTDExportTemplate has_signaling_NaN __RW_INIT(false);
  873.     static const float_denorm_style _RWSTDExportTemplate has_denorm        __RW_INIT(denorm_absent);
  874.     static const bool _RWSTDExportTemplate has_denorm_loss   __RW_INIT(false);
  875.  
  876.     static inline int infinity      () _RWSTD_INLINE_NO_THROW { return 0;     }
  877.     static inline int quiet_NaN     () _RWSTD_INLINE_NO_THROW { return 0;     }
  878.     static inline int signaling_NaN () _RWSTD_INLINE_NO_THROW { return 0;     }
  879.     static inline int denorm_min    () _RWSTD_INLINE_NO_THROW { return min(); }
  880.  
  881.     static const bool _RWSTDExportTemplate is_iec559  __RW_INIT(false);
  882.     static const bool _RWSTDExportTemplate is_bounded __RW_INIT(true);
  883.     static const bool _RWSTDExportTemplate is_modulo  __RW_INIT(false);
  884.  
  885.     static const bool _RWSTDExportTemplate traps           __RW_INIT(false);
  886.     static const bool _RWSTDExportTemplate tinyness_before __RW_INIT(false);
  887.  
  888.     static const float_round_style _RWSTDExportTemplate round_style __RW_INIT(round_toward_zero);
  889.   };
  890. #endif /*!_RWSTD_NO_BOOL*/
  891.  
  892.   template <class T>
  893.   class _RWSTDExportTemplate numeric_limits
  894.   {
  895.   public:
  896.  
  897.     static const bool is_specialized;
  898.  
  899.     static inline T min () _RWSTD_INLINE_NO_THROW { return _RWSTD_STATIC_CAST(T,0); }
  900.     static inline T max () _RWSTD_INLINE_NO_THROW { return _RWSTD_STATIC_CAST(T,0); }
  901.  
  902.     static const int digits;
  903.     static const int digits10;
  904.     
  905.     static const bool is_signed;
  906.     static const bool is_integer;
  907.     static const bool is_exact;
  908.  
  909.     static const int radix;
  910.     static inline T  epsilon     () _RWSTD_INLINE_NO_THROW { return _RWSTD_STATIC_CAST(T,0); }
  911.     static inline T  round_error () _RWSTD_INLINE_NO_THROW { return _RWSTD_STATIC_CAST(T,0); }
  912.  
  913.     static const int min_exponent;
  914.     static const int min_exponent10; 
  915.     static const int max_exponent;
  916.     static const int max_exponent10;
  917.  
  918.     static const bool has_infinity;
  919.     static const bool has_quiet_NaN;
  920.     static const bool has_signaling_NaN;
  921.     static const float_denorm_style has_denorm;
  922.     static const bool has_denorm_loss;
  923.  
  924.     static inline T infinity      () _RWSTD_INLINE_NO_THROW { return _RWSTD_STATIC_CAST(T,0); }
  925.     static inline T quiet_NaN     () _RWSTD_INLINE_NO_THROW { return _RWSTD_STATIC_CAST(T,0); }
  926.     static inline T signaling_NaN () _RWSTD_INLINE_NO_THROW { return _RWSTD_STATIC_CAST(T,0); }
  927.  
  928.     static inline T denorm_min    () _RWSTD_INLINE_NO_THROW { return min(); }
  929.  
  930.     static const bool is_iec559;
  931.     static const bool is_bounded;
  932.     static const bool is_modulo;
  933.  
  934.     static const bool traps;
  935.     static const bool tinyness_before;
  936.  
  937.     static const float_round_style round_style;
  938.   };
  939.  
  940. #ifndef _RWSTD_NO_TEMPLATE_SPECIALIZATION  
  941.   template <class T>
  942.   const bool numeric_limits<T>::is_specialized = false;
  943.  
  944.   template <class T>
  945.   const int numeric_limits<T>::digits = 0;
  946.  
  947.   template <class T>
  948.   const int numeric_limits<T>::digits10 = 0;
  949.  
  950.   template <class T>
  951.   const bool numeric_limits<T>::is_signed = false;
  952.  
  953.   template <class T>
  954.   const bool numeric_limits<T>::is_integer = false;
  955.  
  956.   template <class T>
  957.   const bool numeric_limits<T>::is_exact = false;
  958.  
  959.   template <class T>
  960.   const int numeric_limits<T>::radix = 0;
  961.  
  962.   template <class T>
  963.   const int numeric_limits<T>::min_exponent10 =0; 
  964.  
  965.   template <class T>
  966.   const int numeric_limits<T>::max_exponent10 = 0;
  967.  
  968.   template <class T>
  969.   const int numeric_limits<T>::min_exponent = 0;
  970.  
  971.   template <class T>
  972.   const int numeric_limits<T>::max_exponent = 0;
  973.  
  974.   template <class T>
  975.   const bool numeric_limits<T>::has_infinity = false;
  976.  
  977.   template <class T>
  978.   const bool numeric_limits<T>::has_quiet_NaN = false;
  979.  
  980.   template <class T>
  981.   const bool numeric_limits<T>::has_signaling_NaN = false;    
  982.  
  983.   template <class T>
  984.   const bool numeric_limits<T>::is_iec559 = false;
  985.  
  986.   template <class T>
  987.   const bool numeric_limits<T>::is_bounded = false;
  988.  
  989.   template <class T>
  990.   const bool numeric_limits<T>::is_modulo = false;
  991.  
  992.   template <class T>
  993.   const float_denorm_style numeric_limits<T>::has_denorm = denorm_absent;
  994.  
  995.   template <class T>
  996.   const bool numeric_limits<T>::has_denorm_loss = false;
  997.  
  998.   template <class T>
  999.   const bool numeric_limits<T>::traps = false;
  1000.  
  1001.   template <class T>
  1002.   const bool numeric_limits<T>::tinyness_before = false;
  1003.  
  1004.   template <class T>
  1005.   const float_round_style numeric_limits<T>::round_style = round_toward_zero;
  1006. #endif
  1007.  
  1008. #undef __RW_INIT
  1009.  
  1010. #ifndef _RWSTD_NO_NAMESPACE 
  1011.  
  1012. #endif
  1013.  
  1014. #endif /*__STD_LIMITS*/
  1015. #pragma option pop
  1016. #endif /* __LIMITS_STL */
  1017.