std_cwctype.h: #undef possible function-like macro definitions of iswxxx functions...
authorGabriel Dos Reis <gdr@codesourcery.com>
Tue, 31 Oct 2000 14:40:27 +0000 (14:40 +0000)
committerGabriel Dos Reis <gdr@gcc.gnu.org>
Tue, 31 Oct 2000 14:40:27 +0000 (14:40 +0000)
* include/c/bits/std_cwctype.h: #undef possible function-like
macro definitions of iswxxx functions, which might be brought in
by <wctype.h>.  Those macro definitions prevent build on some
linux-based systems.

* include/bits/std_complex.h (complex<>): Comment out friend
declarations of abs<> specializations.
(abs): Define primary template.

* src/complex.cc (abs): Comment out specialization definition.

From-SVN: r37157

libstdc++-v3/ChangeLog
libstdc++-v3/include/bits/std_complex.h
libstdc++-v3/include/c/bits/std_cwctype.h
libstdc++-v3/src/complex.cc

index fde5cdb..4162041 100644 (file)
@@ -1,3 +1,16 @@
+2000-10-31  Gabriel Dos Reis  <gdr@codesourcery.com>
+
+       * include/c/bits/std_cwctype.h: #undef possible function-like
+       macro definitions of iswxxx functions, which might be brought in
+       by <wctype.h>.  Those macro definitions prevent build on some
+       linux-based systems.
+       
+       * include/bits/std_complex.h (complex<>): Comment out friend
+       declarations of abs<> specializations.
+       (abs): Define primary template.
+
+       * src/complex.cc (abs): Comment out specialization definition.
+
 2000-10-30  Phil Edwards  <pme@sources.redhat.com>
 
        * acinclude.m4 (GLIBCPP_ENABLE_DEBUG):  Raise debugging level from
index 63f7351..056b120 100644 (file)
@@ -176,7 +176,7 @@ namespace std
     friend class complex<double>;
     friend class complex<long double>;
 
-    friend float abs<>(const complex<float>&);
+    // friend float abs<>(const complex<float>&);
     friend float arg<>(const complex<float>&);
 
     friend complex<float> conj<>(const complex<float>&);
@@ -253,7 +253,7 @@ namespace std
     friend class complex<float>;
     friend class complex<long double>;
 
-    friend double abs<>(const complex<double>&);
+    // friend double abs<>(const complex<double>&);
     friend double arg<>(const complex<double>&);
 
     friend complex<double> conj<>(const complex<double>&);
@@ -330,7 +330,7 @@ namespace std
     friend class complex<float>;
     friend class complex<double>;
 
-    friend long double abs<>(const complex<long double>&);
+    // friend long double abs<>(const complex<long double>&);
     friend long double arg<>(const complex<long double>&);
 
     friend complex<long double> conj<>(const complex<long double>&);
@@ -927,6 +927,19 @@ namespace std
     inline _Tp
     imag(const complex<_Tp>& __z)
     { return __z.imag(); }
+
+  template<typename _Tp>
+    inline _Tp
+    abs(const complex<_Tp>& __z)
+    {
+      _Tp __x = __z.real();
+      _Tp __y = __z.imag();
+      _Tp __s = abs(__x) + abs(__y);
+      if (__s == _Tp())  // well ...
+        return __s;
+      __x /= __s; __y /= __s;
+      return __s * sqrt(__x * __x + __y * __y);
+    }
     
 
   // We use here a few more specializations.
@@ -955,7 +968,3 @@ namespace std
 } // namespace std
 
 #endif /* _CPP_COMPLEX */
-
-
-
-
index 5757c14..9a6a891 100644 (file)
@@ -44,6 +44,22 @@ namespace std
   using ::wctype_t;
   using ::wctrans_t;
 
+  // Get rid of those macros defined in <wctype.h> in lieu of real functions.
+#undef iswalnum
+#undef iswalpha
+#undef iswblank
+#undef iswcntrl
+#undef iswdigit
+#undef iswgraph
+#undef iswlower
+#undef iswprint
+#undef iswprint
+#undef iswpunct
+#undef iswspace
+#undef iswupper
+#undef iswxdigit
+#undef iswctype  
+
   extern "C" int iswalnum(wint_t); 
   extern "C" int iswalpha(wint_t); 
   extern "C" int iswblank(wint_t); 
index 6af7ce0..2f7cfc4 100644 (file)
 
 namespace std
 {
-  template<>
-  FLT
-  abs(const complex<FLT>& __x)
-  { 
-    // We don't use cabs here because some systems (IRIX 6.5, for
-    // example) define their own incompatible version.
-    return hypot (__real__ __x._M_value, __imag__ __x._M_value); 
-  }
+//    template<>
+//    FLT
+//    abs(const complex<FLT>& __x)
+//    { 
+//      // We don't use cabs here because some systems (IRIX 6.5, for
+//      // example) define their own incompatible version.
+//      return hypot (__real__ __x._M_value, __imag__ __x._M_value); 
+//    }
 
   template<>
   FLT