diff options
-rw-r--r-- | Eigen/src/Core/CwiseTernaryOp.h | 41 |
1 files changed, 13 insertions, 28 deletions
diff --git a/Eigen/src/Core/CwiseTernaryOp.h b/Eigen/src/Core/CwiseTernaryOp.h index fe71c07cf..9f3576fec 100644 --- a/Eigen/src/Core/CwiseTernaryOp.h +++ b/Eigen/src/Core/CwiseTernaryOp.h @@ -34,22 +34,6 @@ struct traits<CwiseTernaryOp<TernaryOp, Arg1, Arg2, Arg3> > { typedef typename result_of<TernaryOp( const typename Arg1::Scalar&, const typename Arg2::Scalar&, const typename Arg3::Scalar&)>::type Scalar; - EIGEN_STATIC_ASSERT( - (internal::is_same<typename internal::traits<Arg1>::StorageKind, - typename internal::traits<Arg2>::StorageKind>::value), - STORAGE_KIND_MUST_MATCH) - EIGEN_STATIC_ASSERT( - (internal::is_same<typename internal::traits<Arg1>::StorageKind, - typename internal::traits<Arg3>::StorageKind>::value), - STORAGE_KIND_MUST_MATCH) - EIGEN_STATIC_ASSERT( - (internal::is_same<typename internal::traits<Arg1>::StorageIndex, - typename internal::traits<Arg3>::StorageIndex>::value), - STORAGE_INDEX_MUST_MATCH) - EIGEN_STATIC_ASSERT( - (internal::is_same<typename internal::traits<Arg1>::StorageIndex, - typename internal::traits<Arg3>::StorageIndex>::value), - STORAGE_INDEX_MUST_MATCH) typedef typename internal::traits<Arg1>::StorageKind StorageKind; typedef typename internal::traits<Arg1>::StorageIndex StorageIndex; @@ -100,18 +84,8 @@ template <typename TernaryOp, typename Arg1Type, typename Arg2Type, class CwiseTernaryOp : public CwiseTernaryOpImpl< TernaryOp, Arg1Type, Arg2Type, Arg3Type, typename internal::traits<Arg1Type>::StorageKind>, - internal::no_assignment_operator { - EIGEN_STATIC_ASSERT( - (internal::is_same< - typename internal::traits<Arg1Type>::StorageKind, - typename internal::traits<Arg2Type>::StorageKind>::value), - STORAGE_KIND_MUST_MATCH) - EIGEN_STATIC_ASSERT( - (internal::is_same< - typename internal::traits<Arg1Type>::StorageKind, - typename internal::traits<Arg3Type>::StorageKind>::value), - STORAGE_KIND_MUST_MATCH) - + internal::no_assignment_operator +{ public: typedef typename internal::remove_all<Arg1Type>::type Arg1; typedef typename internal::remove_all<Arg2Type>::type Arg2; @@ -137,6 +111,17 @@ class CwiseTernaryOp : public CwiseTernaryOpImpl< // require the sizes to match EIGEN_STATIC_ASSERT_SAME_MATRIX_SIZE(Arg1, Arg2) EIGEN_STATIC_ASSERT_SAME_MATRIX_SIZE(Arg1, Arg3) + + // The index types should match + EIGEN_STATIC_ASSERT((internal::is_same< + typename internal::traits<Arg1Type>::StorageKind, + typename internal::traits<Arg2Type>::StorageKind>::value), + STORAGE_KIND_MUST_MATCH) + EIGEN_STATIC_ASSERT((internal::is_same< + typename internal::traits<Arg1Type>::StorageKind, + typename internal::traits<Arg3Type>::StorageKind>::value), + STORAGE_KIND_MUST_MATCH) + eigen_assert(a1.rows() == a2.rows() && a1.cols() == a2.cols() && a1.rows() == a3.rows() && a1.cols() == a3.cols()); } |