mirror of
https://gitlab.com/libeigen/eigen.git
synced 2025-05-21 20:17:35 +08:00
Clean handling for void type in EIGEN_CHECK_BINARY_COMPATIBILIY
This commit is contained in:
parent
3d71d3918e
commit
2c462f4201
@ -430,6 +430,30 @@ struct ScalarBinaryOpTraits<T,T,BinaryOp>
|
|||||||
typedef T ReturnType;
|
typedef T ReturnType;
|
||||||
};
|
};
|
||||||
|
|
||||||
|
// For Matrix * Permutation
|
||||||
|
template<typename T, typename BinaryOp>
|
||||||
|
struct ScalarBinaryOpTraits<T,void,BinaryOp>
|
||||||
|
{
|
||||||
|
enum { Defined = 1 };
|
||||||
|
typedef T ReturnType;
|
||||||
|
};
|
||||||
|
|
||||||
|
// For Permutation * Matrix
|
||||||
|
template<typename T, typename BinaryOp>
|
||||||
|
struct ScalarBinaryOpTraits<void,T,BinaryOp>
|
||||||
|
{
|
||||||
|
enum { Defined = 1 };
|
||||||
|
typedef T ReturnType;
|
||||||
|
};
|
||||||
|
|
||||||
|
// for Permutation*Permutation
|
||||||
|
template<typename BinaryOp>
|
||||||
|
struct ScalarBinaryOpTraits<void,void,BinaryOp>
|
||||||
|
{
|
||||||
|
enum { Defined = 1 };
|
||||||
|
typedef void ReturnType;
|
||||||
|
};
|
||||||
|
|
||||||
template<typename T, typename BinaryOp>
|
template<typename T, typename BinaryOp>
|
||||||
struct ScalarBinaryOpTraits<T,std::complex<T>,BinaryOp>
|
struct ScalarBinaryOpTraits<T,std::complex<T>,BinaryOp>
|
||||||
{
|
{
|
||||||
|
@ -610,11 +610,6 @@ bool is_same_dense(const T1 &, const T2 &, typename enable_if<!(has_direct_acces
|
|||||||
return false;
|
return false;
|
||||||
}
|
}
|
||||||
|
|
||||||
template<typename T, typename U> struct is_same_or_void { enum { value = is_same<T,U>::value }; };
|
|
||||||
template<typename T> struct is_same_or_void<void,T> { enum { value = 1 }; };
|
|
||||||
template<typename T> struct is_same_or_void<T,void> { enum { value = 1 }; };
|
|
||||||
template<> struct is_same_or_void<void,void> { enum { value = 1 }; };
|
|
||||||
|
|
||||||
#ifdef EIGEN_DEBUG_ASSIGN
|
#ifdef EIGEN_DEBUG_ASSIGN
|
||||||
std::string demangle_traversal(int t)
|
std::string demangle_traversal(int t)
|
||||||
{
|
{
|
||||||
@ -653,9 +648,8 @@ std::string demangle_flags(int f)
|
|||||||
// It is tempting to always allow mixing different types but remember that this is often impossible in the vectorized paths.
|
// It is tempting to always allow mixing different types but remember that this is often impossible in the vectorized paths.
|
||||||
// So allowing mixing different types gives very unexpected errors when enabling vectorization, when the user tries to
|
// So allowing mixing different types gives very unexpected errors when enabling vectorization, when the user tries to
|
||||||
// add together a float matrix and a double matrix.
|
// add together a float matrix and a double matrix.
|
||||||
// Treat "void" as a special case. Needed for permutation products. TODO: this should be handled by ScalarBinaryOpTraits
|
|
||||||
#define EIGEN_CHECK_BINARY_COMPATIBILIY(BINOP,LHS,RHS) \
|
#define EIGEN_CHECK_BINARY_COMPATIBILIY(BINOP,LHS,RHS) \
|
||||||
EIGEN_STATIC_ASSERT(int(internal::is_same_or_void<LHS, RHS>::value) || int(ScalarBinaryOpTraits<LHS, RHS,BINOP>::Defined), \
|
EIGEN_STATIC_ASSERT(int(ScalarBinaryOpTraits<LHS, RHS,BINOP>::Defined), \
|
||||||
YOU_MIXED_DIFFERENT_NUMERIC_TYPES__YOU_NEED_TO_USE_THE_CAST_METHOD_OF_MATRIXBASE_TO_CAST_NUMERIC_TYPES_EXPLICITLY)
|
YOU_MIXED_DIFFERENT_NUMERIC_TYPES__YOU_NEED_TO_USE_THE_CAST_METHOD_OF_MATRIXBASE_TO_CAST_NUMERIC_TYPES_EXPLICITLY)
|
||||||
|
|
||||||
} // end namespace Eigen
|
} // end namespace Eigen
|
||||||
|
Loading…
x
Reference in New Issue
Block a user