diff --git a/Eigen/src/Core/util/Meta.h b/Eigen/src/Core/util/Meta.h index dad0c1d56..e05b58def 100755 --- a/Eigen/src/Core/util/Meta.h +++ b/Eigen/src/Core/util/Meta.h @@ -435,67 +435,6 @@ T div_ceil(const T &a, const T &b) } // end namespace numext - -/** \class ScalarBinaryOpTraits - * \ingroup Core_Module - * - * \brief Determines whether the given binary operation of two numeric types is allowed and what the scalar return type is. - * - * \sa CwiseBinaryOp - */ -template -struct ScalarBinaryOpTraits -#ifndef EIGEN_PARSED_BY_DOXYGEN - // for backward compatibility, use the hints given by the (deprecated) internal::scalar_product_traits class. - : internal::scalar_product_traits -#endif // EIGEN_PARSED_BY_DOXYGEN -{}; - -template -struct ScalarBinaryOpTraits -{ - enum { Defined = 1 }; - typedef T ReturnType; -}; - -// For Matrix * Permutation -template -struct ScalarBinaryOpTraits -{ - enum { Defined = 1 }; - typedef T ReturnType; -}; - -// For Permutation * Matrix -template -struct ScalarBinaryOpTraits -{ - enum { Defined = 1 }; - typedef T ReturnType; -}; - -// for Permutation*Permutation -template -struct ScalarBinaryOpTraits -{ - enum { Defined = 1 }; - typedef void ReturnType; -}; - -template -struct ScalarBinaryOpTraits,BinaryOp> -{ - enum { Defined = 1 }; - typedef std::complex ReturnType; -}; - -template -struct ScalarBinaryOpTraits, T,BinaryOp> -{ - enum { Defined = 1 }; - typedef std::complex ReturnType; -}; - } // end namespace Eigen #endif // EIGEN_META_H diff --git a/Eigen/src/Core/util/XprHelper.h b/Eigen/src/Core/util/XprHelper.h index 2f06c36aa..10662c560 100644 --- a/Eigen/src/Core/util/XprHelper.h +++ b/Eigen/src/Core/util/XprHelper.h @@ -708,6 +708,67 @@ std::string demangle_flags(int f) } // end namespace internal + +/** \class ScalarBinaryOpTraits + * \ingroup Core_Module + * + * \brief Determines whether the given binary operation of two numeric types is allowed and what the scalar return type is. + * + * \sa CwiseBinaryOp + */ +template > +struct ScalarBinaryOpTraits +#ifndef EIGEN_PARSED_BY_DOXYGEN + // for backward compatibility, use the hints given by the (deprecated) internal::scalar_product_traits class. + : internal::scalar_product_traits +#endif // EIGEN_PARSED_BY_DOXYGEN +{}; + +template +struct ScalarBinaryOpTraits +{ + enum { Defined = 1 }; + typedef T ReturnType; +}; + +// For Matrix * Permutation +template +struct ScalarBinaryOpTraits +{ + enum { Defined = 1 }; + typedef T ReturnType; +}; + +// For Permutation * Matrix +template +struct ScalarBinaryOpTraits +{ + enum { Defined = 1 }; + typedef T ReturnType; +}; + +// for Permutation*Permutation +template +struct ScalarBinaryOpTraits +{ + enum { Defined = 1 }; + typedef void ReturnType; +}; + +template +struct ScalarBinaryOpTraits,BinaryOp> +{ + enum { Defined = 1 }; + typedef std::complex ReturnType; +}; + +template +struct ScalarBinaryOpTraits, T,BinaryOp> +{ + enum { Defined = 1 }; + typedef std::complex ReturnType; +}; + // We require Lhs and Rhs to have "compatible" scalar types. // 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