std_cwctype.h: #undef possible function-like macro definitions of iswxxx functions...

* 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
This commit is contained in:
Gabriel Dos Reis 2000-10-31 14:40:27 +00:00 committed by Gabriel Dos Reis
parent 8bb1662097
commit 89b7816993
4 changed files with 53 additions and 15 deletions

View 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

View 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 */

View 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);

View File

@ -45,14 +45,14 @@
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