mknumeric_limits: Add static defintions, format.
authorBenjamin Kosnik <bkoz@redhat.com>
Wed, 20 Jun 2001 03:05:31 +0000 (03:05 +0000)
committerBenjamin Kosnik <bkoz@gcc.gnu.org>
Wed, 20 Jun 2001 03:05:31 +0000 (03:05 +0000)
2001-06-19  Benjamin Kosnik  <bkoz@redhat.com>

* mknumeric_limits: Add static defintions, format.
* testsuite/18_support/numeric_limits.cc (test02): Add test.

* include/c_std/bits/std_cwchar.h: Include ctime.
* testsuite/17_intro/header_cwchar.cc : Check.

* include/c_std/bits/std_cwctype.h: Inject wctype.

From-SVN: r43466

libstdc++-v3/ChangeLog
libstdc++-v3/include/c_std/bits/std_cwchar.h
libstdc++-v3/include/c_std/bits/std_cwctype.h
libstdc++-v3/mknumeric_limits
libstdc++-v3/testsuite/17_intro/header_cwchar.cc
libstdc++-v3/testsuite/17_intro/header_cwctype.cc
libstdc++-v3/testsuite/18_support/numeric_limits.cc

index 1bbe7bc..0bf66e8 100644 (file)
@@ -1,3 +1,14 @@
+2001-06-19  Benjamin Kosnik  <bkoz@redhat.com>
+
+       * mknumeric_limits: Add static defintions, format.
+       * testsuite/18_support/numeric_limits.cc (test02): Add test.
+
+       * include/c_std/bits/std_cwchar.h: Include ctime.
+       * testsuite/17_intro/header_cwchar.cc : Check.
+
+       * include/c_std/bits/std_cwctype.h: Inject wctype.
+       * testsuite/17_intro/header_cwctype.cc: Update.
+
 2001-06-18  Benjamin Kosnik  <bkoz@redhat.com>
 
        * include/bits/stl_raw_storage_iter.h: Format. Correct derivation.
index 6ad9931..fffd37a 100644 (file)
@@ -28,7 +28,7 @@
 // the GNU General Public License.
 
 //
-// ISO C++ 14882: ???
+// ISO C++ 14882: 21.4
 //
 
 #ifndef _CPP_CWCHAR
@@ -36,6 +36,7 @@
 
 #include <bits/c++config.h>
 #include <bits/std_cstddef.h>
+#include <bits/std_ctime.h>
 
 #if _GLIBCPP_HAVE_WCHAR_H
 #pragma GCC system_header
index 8fd58d0..53de4d3 100644 (file)
@@ -56,6 +56,7 @@
 #undef towupper
 #undef towctrans
 #undef wctrans
+#undef wctype
 
 namespace std
 {
@@ -82,6 +83,7 @@ namespace std
   using ::towupper;
   using ::towctrans;
   using ::wctrans;
+  using ::wctype;
 }
 
 #endif 
index 635e280..53d4106 100755 (executable)
@@ -99,67 +99,159 @@ cat <<EOF > $OUT_H-t
 #include <bits/c++config.h>
 #include <bits/std_cfloat.h>
 
-namespace std {
-
-    enum float_round_style {
-        round_indeterminate       = -1,
-        round_toward_zero         = 0,
-        round_to_nearest          = 1,
-        round_toward_infinity     = 2,
-        round_toward_neg_infinity = 3
+namespace std
+{
+  enum float_round_style 
+  {
+    round_indeterminate       = -1,
+    round_toward_zero         = 0,
+    round_to_nearest          = 1,
+    round_toward_infinity     = 2,
+    round_toward_neg_infinity = 3
+  };
+
+  enum float_denorm_style 
+  {
+    denorm_indeterminate = -1,
+    denorm_absent        = 0,
+    denorm_present       = 1
+  };
+
+  template<typename _Tp> 
+    struct numeric_limits 
+    {
+      static const bool is_specialized = false;
+
+      static _Tp min() throw() { return static_cast<_Tp>(0); }
+      static _Tp max() throw() { return static_cast<_Tp>(0); }
+
+      static const int digits = 0;
+      static const int digits10 = 0;
+      static const bool is_signed = false;
+      static const bool is_integer = false;
+      static const bool is_exact = false;
+      static const int radix = 0;
+
+      static _Tp epsilon() throw() { return static_cast<_Tp>(0); }
+      static _Tp round_error() throw() { return static_cast<_Tp>(0); }
+
+      static const int min_exponent = 0;
+      static const int min_exponent10 = 0;
+      static const int max_exponent = 0;
+      static const int max_exponent10 = 0;
+
+      static const bool has_infinity = false;
+      static const bool has_quiet_NaN = false;
+      static const bool has_signaling_NaN = false;
+      static const float_denorm_style has_denorm = denorm_absent;
+      static const bool has_denorm_loss = false;
+
+      static _Tp infinity() throw()  { return static_cast<_Tp>(0); }
+      static _Tp quiet_NaN() throw() { return static_cast<_Tp>(0); }
+      static _Tp signaling_NaN() throw() { return static_cast<_Tp>(0); }
+      static _Tp denorm_min() throw() { return static_cast<_Tp>(0); }
+
+      static const bool is_iec559 = false;
+      static const bool is_bounded = false;
+      static const bool is_modulo = false;
+
+      static const bool traps = false;
+      static const bool tinyness_before = false;
+      static const float_round_style round_style = round_toward_zero;
     };
 
-    enum float_denorm_style {
-        denorm_indeterminate = -1,
-        denorm_absent        = 0,
-        denorm_present       = 1
-    };
+  template<typename _Tp> 
+    const bool
+    numeric_limits<_Tp>::is_specialized;
 
-    template<typename _Tp> struct numeric_limits {
-        static const bool is_specialized = false;
-
-        static _Tp min() throw() { return static_cast<_Tp>(0); }
-        static _Tp max() throw() { return static_cast<_Tp>(0); }
-
-        static const int digits = 0;
-        static const int digits10 = 0;
-        static const bool is_signed = false;
-        static const bool is_integer = false;
-        static const bool is_exact = false;
-        static const int radix = 0;
-
-        static _Tp epsilon() throw() { return static_cast<_Tp>(0); }
-        static _Tp round_error() throw() { return static_cast<_Tp>(0); }
-
-        static const int min_exponent = 0;
-        static const int min_exponent10 = 0;
-        static const int max_exponent = 0;
-        static const int max_exponent10 = 0;
-
-        static const bool has_infinity = false;
-        static const bool has_quiet_NaN = false;
-        static const bool has_signaling_NaN = false;
-        static const float_denorm_style has_denorm = denorm_absent;
-        static const bool has_denorm_loss = false;
-
-        static _Tp infinity() throw()  { return static_cast<_Tp>(0); }
-        static _Tp quiet_NaN() throw() { return static_cast<_Tp>(0); }
-        static _Tp signaling_NaN() throw() { return static_cast<_Tp>(0); }
-        static _Tp denorm_min() throw() { return static_cast<_Tp>(0); }
-
-        static const bool is_iec559 = false;
-        static const bool is_bounded = false;
-        static const bool is_modulo = false;
-
-        static const bool traps = false;
-        static const bool tinyness_before = false;
-        static const float_round_style round_style = round_toward_zero;
-    };
+  template<typename _Tp> 
+    const int
+    numeric_limits<_Tp>::digits;
+
+  template<typename _Tp> 
+    const int
+    numeric_limits<_Tp>::digits10;
+
+  template<typename _Tp> 
+    const bool
+    numeric_limits<_Tp>::is_signed;
+
+  template<typename _Tp> 
+    const bool
+    numeric_limits<_Tp>::is_integer;
+
+  template<typename _Tp> 
+    const bool
+    numeric_limits<_Tp>::is_exact;
+
+  template<typename _Tp> 
+    const int
+    numeric_limits<_Tp>::radix;
+
+  template<typename _Tp> 
+    const int
+    numeric_limits<_Tp>::min_exponent;
+
+  template<typename _Tp> 
+    const int
+    numeric_limits<_Tp>::min_exponent10;
+
+  template<typename _Tp> 
+    const int
+    numeric_limits<_Tp>::max_exponent;
+
+  template<typename _Tp> 
+    const int
+    numeric_limits<_Tp>::max_exponent10;
 
-    template<typename _Tp> _Tp __limits_infinity();
-    template<typename _Tp> _Tp __limits_quiet_NaN();
-    template<typename _Tp> _Tp __limits_signaling_NaN();
-    template<typename _Tp> _Tp __limits_denorm_min();
+  template<typename _Tp> 
+    const bool
+    numeric_limits<_Tp>::has_infinity;
+
+  template<typename _Tp> 
+    const bool
+    numeric_limits<_Tp>::has_quiet_NaN;
+
+  template<typename _Tp> 
+    const bool
+    numeric_limits<_Tp>::has_signaling_NaN;
+
+  template<typename _Tp> 
+    const float_denorm_style
+    numeric_limits<_Tp>::has_denorm;
+
+  template<typename _Tp> 
+    const bool
+    numeric_limits<_Tp>::has_denorm_loss;
+
+  template<typename _Tp> 
+    const bool
+    numeric_limits<_Tp>::is_iec559;
+
+  template<typename _Tp> 
+    const bool
+    numeric_limits<_Tp>::is_bounded;
+
+  template<typename _Tp> 
+    const bool
+    numeric_limits<_Tp>::is_modulo;
+
+  template<typename _Tp> 
+    const bool
+    numeric_limits<_Tp>::traps;
+
+  template<typename _Tp> 
+    const bool
+    numeric_limits<_Tp>::tinyness_before;
+
+  template<typename _Tp> 
+    const float_round_style
+    numeric_limits<_Tp>::round_style;
+
+  template<typename _Tp> _Tp __limits_infinity();
+  template<typename _Tp> _Tp __limits_quiet_NaN();
+  template<typename _Tp> _Tp __limits_signaling_NaN();
+  template<typename _Tp> _Tp __limits_denorm_min();
 
 EOF
 
@@ -271,3 +363,5 @@ EOF
 
 mv $OUT_C-t $OUT_C
 mv $OUT_H-t $OUT_H
+
+
index cdc91b2..0f9974d 100644 (file)
@@ -27,5 +27,8 @@ int main(void)
 {
   // Make sure size_t is in namespace std
   std::size_t i = 5;
+
+  std::tm mytime;
+
   return 0;
 }
index 8374a46..ba315b4 100644 (file)
 
 #if _GLIBCPP_USE_WCHAR_T
 #include <cwctype>
-  // Make sure wint_t is in namespace std
-  std::wint_t i = 5;
+// Make sure wint_t is in namespace std
+std::wint_t i = 5;
+
+// Make sure table 46 is in namespace std.
+using std::wctype_t;
+using std::wctrans_t;
+using std::iswalpha;
+using std::iswupper;
+using std::iswlower;
+using std::iswdigit;
+using std::iswxdigit;
+using std::iswalnum;
+using std::iswspace;
+using std::iswpunct;
+using std::iswprint;
+using std::iswgraph;
+using std::iswcntrl;
+using std::iswctype;
+using std::towctrans;
+using std::towlower;
+using std::towupper;
+using std::wctrans;
+using std::wctype;
 #endif
 
 int main(void)
 {
   return 0;
 }
+
index f617375..4ff7f4a 100644 (file)
@@ -1,6 +1,6 @@
 // 1999-08-23 bkoz
 
-// Copyright (C) 1999 Free Software Foundation
+// Copyright (C) 1999, 2001 Free Software Foundation
 //
 // This file is part of the GNU ISO C++ Library.  This library is free
 // software; you can redistribute it and/or modify it under the
@@ -80,9 +80,21 @@ bool test01()
   return test;
 }
 
+// test linkage of the generic bits
+void test02()
+{
+  typedef std::numeric_limits<B> b_nl_type;
+  
+  // Should probably do all of them...
+  const int* pi1 = &b_nl_type::digits;
+  const int* pi2 = &b_nl_type::digits10;
+  const int* pi3 = &b_nl_type::max_exponent10;
+  const bool* pb1 = &b_nl_type::traps;
+}
+
 int main()
 {
   test01();
-
+  test02();
   return 0;
 }