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
	
	 Jonathan Wakely
						Jonathan Wakely