+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
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>&);
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>&);
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>&);
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.
} // namespace std
#endif /* _CPP_COMPLEX */
-
-
-
-
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