diff options
author | Gael Guennebaud <g.gael@free.fr> | 2015-11-20 15:29:03 +0100 |
---|---|---|
committer | Gael Guennebaud <g.gael@free.fr> | 2015-11-20 15:29:03 +0100 |
commit | 4fc36079e778a4944af27f1d71e41fa45bae197e (patch) | |
tree | d854578784df173e632e6019158f7d05b6f51439 /Eigen | |
parent | 4a985e793c6c6f822c18243f8c10508e4a8b635c (diff) |
Fix overload instantiation for clang
Diffstat (limited to 'Eigen')
-rw-r--r-- | Eigen/src/Core/MathFunctions.h | 51 |
1 files changed, 28 insertions, 23 deletions
diff --git a/Eigen/src/Core/MathFunctions.h b/Eigen/src/Core/MathFunctions.h index 5187b9c90..fe1dafe83 100644 --- a/Eigen/src/Core/MathFunctions.h +++ b/Eigen/src/Core/MathFunctions.h @@ -687,21 +687,21 @@ inline EIGEN_MATHFUNC_RETVAL(random, Scalar) random() template<typename T> EIGEN_DEVICE_FUNC typename internal::enable_if<internal::is_integral<T>::value,bool>::type -isnan_impl(const T &x) { return false; } +isnan_impl(const T&) { return false; } template<typename T> EIGEN_DEVICE_FUNC typename internal::enable_if<internal::is_integral<T>::value,bool>::type -isinf_impl(const T &x) { return false; } +isinf_impl(const T&) { return false; } template<typename T> EIGEN_DEVICE_FUNC typename internal::enable_if<internal::is_integral<T>::value,bool>::type -isfinite_impl(const T &x) { return true; } +isfinite_impl(const T&) { return true; } template<typename T> EIGEN_DEVICE_FUNC -typename internal::enable_if<!internal::is_integral<T>::value,bool>::type +typename internal::enable_if<(!internal::is_integral<T>::value)&&(!NumTraits<T>::IsComplex),bool>::type isfinite_impl(const T& x) { #if EIGEN_USE_STD_FPCLASSIFY @@ -714,7 +714,7 @@ isfinite_impl(const T& x) template<typename T> EIGEN_DEVICE_FUNC -typename internal::enable_if<!internal::is_integral<T>::value,bool>::type +typename internal::enable_if<(!internal::is_integral<T>::value)&&(!NumTraits<T>::IsComplex),bool>::type isinf_impl(const T& x) { #if EIGEN_USE_STD_FPCLASSIFY @@ -727,7 +727,7 @@ isinf_impl(const T& x) template<typename T> EIGEN_DEVICE_FUNC -typename internal::enable_if<!internal::is_integral<T>::value,bool>::type +typename internal::enable_if<(!internal::is_integral<T>::value)&&(!NumTraits<T>::IsComplex),bool>::type isnan_impl(const T& x) { #if EIGEN_USE_STD_FPCLASSIFY @@ -779,23 +779,10 @@ template<> EIGEN_TMP_NOOPT_ATTRIB bool isinf_impl(const long double& x) { return #endif -template<typename T> -bool isfinite_impl(const std::complex<T>& x) -{ - return (numext::isfinite)(numext::real(x)) && (numext::isfinite)(numext::imag(x)); -} - -template<typename T> -bool isnan_impl(const std::complex<T>& x) -{ - return (numext::isnan)(numext::real(x)) || (numext::isnan)(numext::imag(x)); -} - -template<typename T> -bool isinf_impl(const std::complex<T>& x) -{ - return ((numext::isinf)(numext::real(x)) || (numext::isinf)(numext::imag(x))) && (!(numext::isnan)(x)); -} +// The following overload are defined at the end of this file +template<typename T> bool isfinite_impl(const std::complex<T>& x); +template<typename T> bool isnan_impl(const std::complex<T>& x); +template<typename T> bool isinf_impl(const std::complex<T>& x); } // end namespace internal @@ -986,6 +973,24 @@ inline int log2(int x) namespace internal { +template<typename T> +bool isfinite_impl(const std::complex<T>& x) +{ + return (numext::isfinite)(numext::real(x)) && (numext::isfinite)(numext::imag(x)); +} + +template<typename T> +bool isnan_impl(const std::complex<T>& x) +{ + return (numext::isnan)(numext::real(x)) || (numext::isnan)(numext::imag(x)); +} + +template<typename T> +bool isinf_impl(const std::complex<T>& x) +{ + return ((numext::isinf)(numext::real(x)) || (numext::isinf)(numext::imag(x))) && (!(numext::isnan)(x)); +} + /**************************************************************************** * Implementation of fuzzy comparisons * ****************************************************************************/ |