This is the mail archive of the libstdc++@gcc.gnu.org mailing list for the libstdc++ project.


Index Nav: [Date Index] [Subject Index] [Author Index] [Thread Index]
Message Nav: [Date Prev] [Date Next] [Thread Prev] [Thread Next]
Other format: [Raw text]

C++11 math overloads in <math.h> on Solaris


Hi Rainer,

Could you tell me whether the <math.h> on Solaris declares the
additional overloads such as acosh(float) and acosh(long double) in
C++98 mode, or only for C++11 and later?

I'm trying to fix and simplify <tr1/cmath> for PR 69893 and I think we
can get rid of most of the __CORRECT_ISO_CPP11_MATH_H_PROTO conditions
if we do it like this:

namespace std { namespace tr1 {

 // For functions defined in C++03 the additional overloads are already
 // declared in <cmath> so we can just re-declare them in std::tr1.

 using std::acos;
 using std::asin;
 // etc. ...

#if __cplusplus >= 201103L

 // Since C++11, <cmath> defines additional overloads for these functions
 // in namespace std.

 using std::acosh;
 using std::asinh;
 // etc. ...

#else // ! C++11

 // In C++03 we need to provide the additional overloads.

#ifndef __CORRECT_ISO_CPP11_MATH_H_PROTO
  inline float
  acosh(float __x)
  { return __builtin_acoshf(__x); }

  inline long double
  acosh(long double __x)
  { return __builtin_acoshl(__x); }
#endif

  template<typename _Tp>
inline typename __gnu_cxx::__enable_if<__is_integer<_Tp>::__value,

The __CORRECT_ISO_CPP11_MATH_H_PROTO isn't needed here if Solaris only
provides float and long double overloads for acosh, asinh, atanh,
cbrt, copysign etc.  when __cplusplus >= 201103L.


Index Nav: [Date Index] [Subject Index] [Author Index] [Thread Index]
Message Nav: [Date Prev] [Date Next] [Thread Prev] [Thread Next]