mirror of git://gcc.gnu.org/git/gcc.git
Define C++17 std::hypot without _GLIBCXX_USE_C99_MATH_TR1
* include/c_global/cmath (hypot, __hypot3): Move C++17 overloads outside _GLIBCXX_USE_C99_MATH_TR1 condition. From-SVN: r240620
This commit is contained in:
parent
a9087411ad
commit
998e01a6d5
|
|
@ -1,3 +1,8 @@
|
|||
2016-09-29 Jonathan Wakely <jwakely@redhat.com>
|
||||
|
||||
* include/c_global/cmath (hypot, __hypot3): Move C++17 overloads
|
||||
outside _GLIBCXX_USE_C99_MATH_TR1 condition.
|
||||
|
||||
2016-09-29 Alan Modra <amodra@gmail.com>
|
||||
|
||||
* configure.ac (LONG_DOUBLE_COMPAT_FLAGS): New ACSUBST.
|
||||
|
|
|
|||
|
|
@ -1455,46 +1455,6 @@ _GLIBCXX_BEGIN_NAMESPACE_VERSION
|
|||
return hypot(__type(__x), __type(__y));
|
||||
}
|
||||
|
||||
#if __cplusplus > 201402L
|
||||
#define __cpp_lib_hypot 201603
|
||||
// [c.math.hypot3], three-dimensional hypotenuse
|
||||
|
||||
template<typename _Tp>
|
||||
inline _Tp
|
||||
__hypot3(_Tp __x, _Tp __y, _Tp __z)
|
||||
{
|
||||
__x = std::abs(__x);
|
||||
__y = std::abs(__y);
|
||||
__z = std::abs(__z);
|
||||
if (_Tp __a = __x < __y ? __y < __z ? __z : __y : __x < __z ? __z : __x)
|
||||
return __a * std::sqrt((__x / __a) * (__x / __a)
|
||||
+ (__y / __a) * (__y / __a)
|
||||
+ (__z / __a) * (__z / __a));
|
||||
else
|
||||
return {};
|
||||
}
|
||||
|
||||
inline float
|
||||
hypot(float __x, float __y, float __z)
|
||||
{ return std::__hypot3<float>(__x, __y, __z); }
|
||||
|
||||
inline double
|
||||
hypot(double __x, double __y, double __z)
|
||||
{ return std::__hypot3<double>(__x, __y, __z); }
|
||||
|
||||
inline long double
|
||||
hypot(long double __x, long double __y, long double __z)
|
||||
{ return std::__hypot3<long double>(__x, __y, __z); }
|
||||
|
||||
template<typename _Tp, typename _Up, typename _Vp>
|
||||
typename __gnu_cxx::__promote_3<_Tp, _Up, _Vp>::__type
|
||||
hypot(_Tp __x, _Up __y, _Vp __z)
|
||||
{
|
||||
using __type = typename __gnu_cxx::__promote_3<_Tp, _Up, _Vp>::__type;
|
||||
return std::__hypot3<__type>(__x, __y, __z);
|
||||
}
|
||||
#endif // C++17
|
||||
|
||||
#ifndef __CORRECT_ISO_CPP11_MATH_H_PROTO
|
||||
constexpr int
|
||||
ilogb(float __x)
|
||||
|
|
@ -1830,6 +1790,53 @@ _GLIBCXX_END_NAMESPACE_VERSION
|
|||
|
||||
#endif // C++11
|
||||
|
||||
#if __cplusplus > 201402L
|
||||
namespace std _GLIBCXX_VISIBILITY(default)
|
||||
{
|
||||
_GLIBCXX_BEGIN_NAMESPACE_VERSION
|
||||
|
||||
// [c.math.hypot3], three-dimensional hypotenuse
|
||||
#define __cpp_lib_hypot 201603
|
||||
|
||||
template<typename _Tp>
|
||||
inline _Tp
|
||||
__hypot3(_Tp __x, _Tp __y, _Tp __z)
|
||||
{
|
||||
__x = std::abs(__x);
|
||||
__y = std::abs(__y);
|
||||
__z = std::abs(__z);
|
||||
if (_Tp __a = __x < __y ? __y < __z ? __z : __y : __x < __z ? __z : __x)
|
||||
return __a * std::sqrt((__x / __a) * (__x / __a)
|
||||
+ (__y / __a) * (__y / __a)
|
||||
+ (__z / __a) * (__z / __a));
|
||||
else
|
||||
return {};
|
||||
}
|
||||
|
||||
inline float
|
||||
hypot(float __x, float __y, float __z)
|
||||
{ return std::__hypot3<float>(__x, __y, __z); }
|
||||
|
||||
inline double
|
||||
hypot(double __x, double __y, double __z)
|
||||
{ return std::__hypot3<double>(__x, __y, __z); }
|
||||
|
||||
inline long double
|
||||
hypot(long double __x, long double __y, long double __z)
|
||||
{ return std::__hypot3<long double>(__x, __y, __z); }
|
||||
|
||||
template<typename _Tp, typename _Up, typename _Vp>
|
||||
typename __gnu_cxx::__promote_3<_Tp, _Up, _Vp>::__type
|
||||
hypot(_Tp __x, _Up __y, _Vp __z)
|
||||
{
|
||||
using __type = typename __gnu_cxx::__promote_3<_Tp, _Up, _Vp>::__type;
|
||||
return std::__hypot3<__type>(__x, __y, __z);
|
||||
}
|
||||
_GLIBCXX_END_NAMESPACE_VERSION
|
||||
} // namespace
|
||||
#endif // C++17
|
||||
|
||||
|
||||
#if _GLIBCXX_USE_STD_SPEC_FUNCS
|
||||
# include <bits/specfun.h>
|
||||
#endif
|
||||
|
|
|
|||
Loading…
Reference in New Issue