Fix overload instantiation for clang

This commit is contained in:
Gael Guennebaud 2015-11-20 15:29:03 +01:00
parent 4a985e793c
commit 4fc36079e7

View File

@ -687,21 +687,21 @@ inline EIGEN_MATHFUNC_RETVAL(random, Scalar) random()
template<typename T> template<typename T>
EIGEN_DEVICE_FUNC EIGEN_DEVICE_FUNC
typename internal::enable_if<internal::is_integral<T>::value,bool>::type 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> template<typename T>
EIGEN_DEVICE_FUNC EIGEN_DEVICE_FUNC
typename internal::enable_if<internal::is_integral<T>::value,bool>::type 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> template<typename T>
EIGEN_DEVICE_FUNC EIGEN_DEVICE_FUNC
typename internal::enable_if<internal::is_integral<T>::value,bool>::type 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> template<typename T>
EIGEN_DEVICE_FUNC 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) isfinite_impl(const T& x)
{ {
#if EIGEN_USE_STD_FPCLASSIFY #if EIGEN_USE_STD_FPCLASSIFY
@ -714,7 +714,7 @@ isfinite_impl(const T& x)
template<typename T> template<typename T>
EIGEN_DEVICE_FUNC 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) isinf_impl(const T& x)
{ {
#if EIGEN_USE_STD_FPCLASSIFY #if EIGEN_USE_STD_FPCLASSIFY
@ -727,7 +727,7 @@ isinf_impl(const T& x)
template<typename T> template<typename T>
EIGEN_DEVICE_FUNC 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) isnan_impl(const T& x)
{ {
#if EIGEN_USE_STD_FPCLASSIFY #if EIGEN_USE_STD_FPCLASSIFY
@ -779,23 +779,10 @@ template<> EIGEN_TMP_NOOPT_ATTRIB bool isinf_impl(const long double& x) { return
#endif #endif
template<typename T> // The following overload are defined at the end of this file
bool isfinite_impl(const std::complex<T>& x) template<typename T> bool isfinite_impl(const std::complex<T>& x);
{ template<typename T> bool isnan_impl(const std::complex<T>& x);
return (numext::isfinite)(numext::real(x)) && (numext::isfinite)(numext::imag(x)); template<typename T> bool isinf_impl(const std::complex<T>& 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));
}
} // end namespace internal } // end namespace internal
@ -986,6 +973,24 @@ inline int log2(int x)
namespace internal { 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 * * Implementation of fuzzy comparisons *
****************************************************************************/ ****************************************************************************/