mirror of
https://gitlab.com/libeigen/eigen.git
synced 2025-06-04 18:54:00 +08:00
Fix overload instantiation for clang
This commit is contained in:
parent
4a985e793c
commit
4fc36079e7
@ -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 *
|
||||||
****************************************************************************/
|
****************************************************************************/
|
||||||
|
Loading…
x
Reference in New Issue
Block a user