diff --git a/src/ref.hpp b/src/ref.hpp index ddeee580bd5eca338beb9797604f5e67cf86e442..641228e1862ac20c3bec6225fe0b2169f7db6df8 100644 --- a/src/ref.hpp +++ b/src/ref.hpp @@ -19,6 +19,12 @@ #include "eigenpy/fwd.hpp" +// For old Eigen versions, EIGEN_DEVICE_FUNC is not defined. +// We must define it just in the scope of this file. +#if not EIGEN_VERSION_AT_LEAST(3,2,91) +#define EIGEN_DEVICE_FUNC +#endif + namespace eigenpy { template<typename MatType, int IsVectorAtCompileTime = MatType::IsVectorAtCompileTime> @@ -49,17 +55,21 @@ namespace eigenpy typedef typename Eigen::internal::traits<Base>::Scalar Scalar; /*!< \brief Numeric type, e.g. float, double, int or std::complex<float>. */ \ typedef typename Eigen::NumTraits<Scalar>::Real RealScalar; /*!< \brief The underlying numeric type for composed scalar types. \details In cases where Scalar is e.g. std::complex<T>, T were corresponding to RealScalar. */ \ - typedef typename Base::CoeffReturnType CoeffReturnType; /*!< \brief The return type for coefficient access. \details Depending on whether the object allows direct coefficient access (e.g. for a MatrixXd), this type is either 'const Scalar&' or simply 'Scalar' for objects that do not allow direct coefficient access. */ \ - typedef typename Eigen::internal::ref_selector<Base>::type Nested; \ - typedef typename Eigen::internal::traits<Base>::StorageKind StorageKind; \ - typedef typename Eigen::internal::traits<Base>::StorageIndex StorageIndex; \ - enum { RowsAtCompileTime = Eigen::internal::traits<Base>::RowsAtCompileTime, \ - ColsAtCompileTime = Eigen::internal::traits<Base>::ColsAtCompileTime, \ - Flags = Eigen::internal::traits<Base>::Flags, \ - SizeAtCompileTime = Base::SizeAtCompileTime, \ - MaxSizeAtCompileTime = Base::MaxSizeAtCompileTime, \ - IsVectorAtCompileTime = Base::IsVectorAtCompileTime }; \ - using Base::derived; \ + typedef typename Base::CoeffReturnType CoeffReturnType; /*!< \brief The return type for coefficient access. \details Depending on whether the object allows direct coefficient access (e.g. for a MatrixXd), this type is either 'const Scalar&' or simply 'Scalar' for objects that do not allow direct coefficient access. */ + typedef typename Eigen::internal::ref_selector<Base>::type Nested; + typedef typename Eigen::internal::traits<Base>::StorageKind StorageKind; +#if EIGEN_VERSION_AT_LEAST(3,2,91) + typedef typename Eigen::internal::traits<Base>::StorageIndex StorageIndex; +#else + typedef typename Eigen::internal::traits<Base>::Index StorageIndex; +#endif + enum { RowsAtCompileTime = Eigen::internal::traits<Base>::RowsAtCompileTime, + ColsAtCompileTime = Eigen::internal::traits<Base>::ColsAtCompileTime, + Flags = Eigen::internal::traits<Base>::Flags, + SizeAtCompileTime = Base::SizeAtCompileTime, + MaxSizeAtCompileTime = Base::MaxSizeAtCompileTime, + IsVectorAtCompileTime = Base::IsVectorAtCompileTime }; + using Base::derived; using Base::const_cast_derived; typedef typename Base::PacketScalar PacketScalar; @@ -94,4 +104,8 @@ namespace eigenpy }; // struct Ref<PlainObjectType> } +#if not EIGEN_VERSION_AT_LEAST(3,2,91) +#undef EIGEN_DEVICE_FUNC +#endif + #endif // ifndef __eigenpy_ref_hpp__