fix compilation adding a makeconst helper struct
diff --git a/Eigen/src/Core/Assign.h b/Eigen/src/Core/Assign.h index 4bd1046..8dc0157 100644 --- a/Eigen/src/Core/Assign.h +++ b/Eigen/src/Core/Assign.h
@@ -93,7 +93,7 @@ ? ( int(MayUnrollCompletely) && int(DstIsAligned) ? int(CompleteUnrolling) : int(NoUnrolling) ) : int(NoUnrolling) }; - + static void debug() { EIGEN_DEBUG_VAR(DstIsAligned)
diff --git a/Eigen/src/Core/Functors.h b/Eigen/src/Core/Functors.h index ef4485f..259f402 100644 --- a/Eigen/src/Core/Functors.h +++ b/Eigen/src/Core/Functors.h
@@ -350,7 +350,7 @@ EIGEN_STRONG_INLINE Scalar operator() (const Scalar& a) const { return a * m_other; } EIGEN_STRONG_INLINE const PacketScalar packetOp(const PacketScalar& a) const { return ei_pmul(a, ei_pset1(m_other)); } - const typename NumTraits<Scalar>::Nested m_other; + typename ei_makeconst<typename NumTraits<Scalar>::Nested>::type m_other; private: ei_scalar_multiple_op& operator=(const ei_scalar_multiple_op&); }; @@ -364,7 +364,7 @@ EIGEN_STRONG_INLINE ei_scalar_multiple2_op(const ei_scalar_multiple2_op& other) : m_other(other.m_other) { } EIGEN_STRONG_INLINE ei_scalar_multiple2_op(const Scalar2& other) : m_other(other) { } EIGEN_STRONG_INLINE result_type operator() (const Scalar1& a) const { return a * m_other; } - const typename NumTraits<Scalar2>::Nested m_other; + typename ei_makeconst<typename NumTraits<Scalar2>::Nested>::type m_other; }; template<typename Scalar1,typename Scalar2> struct ei_functor_traits<ei_scalar_multiple2_op<Scalar1,Scalar2> > @@ -393,7 +393,7 @@ EIGEN_STRONG_INLINE ei_scalar_quotient1_impl(const ei_scalar_quotient1_impl& other) : m_other(other.m_other) { } EIGEN_STRONG_INLINE ei_scalar_quotient1_impl(const Scalar& other) : m_other(other) {} EIGEN_STRONG_INLINE Scalar operator() (const Scalar& a) const { return a / m_other; } - const typename NumTraits<Scalar>::Nested m_other; + typename ei_makeconst<typename NumTraits<Scalar>::Nested>::type m_other; }; template<typename Scalar> struct ei_functor_traits<ei_scalar_quotient1_impl<Scalar,false> >
diff --git a/Eigen/src/Core/util/Memory.h b/Eigen/src/Core/util/Memory.h index f8581ee..bc52355 100644 --- a/Eigen/src/Core/util/Memory.h +++ b/Eigen/src/Core/util/Memory.h
@@ -83,7 +83,7 @@ ei_assert(false && "heap allocation is forbidden (EIGEN_NO_MALLOC is defined)"); #endif - void *result; + void *result; #if !EIGEN_ALIGN result = malloc(size); #elif EIGEN_MALLOC_ALREADY_ALIGNED @@ -97,7 +97,7 @@ #else result = ei_handmade_aligned_malloc(size); #endif - + #ifdef EIGEN_EXCEPTIONS if(result == 0) throw std::bad_alloc(); @@ -324,34 +324,34 @@ typedef aligned_allocator<U> other; }; - pointer address( reference value ) const + pointer address( reference value ) const { return &value; } - const_pointer address( const_reference value ) const + const_pointer address( const_reference value ) const { return &value; } - aligned_allocator() throw() + aligned_allocator() throw() { } - aligned_allocator( const aligned_allocator& ) throw() + aligned_allocator( const aligned_allocator& ) throw() { } template<class U> - aligned_allocator( const aligned_allocator<U>& ) throw() + aligned_allocator( const aligned_allocator<U>& ) throw() { } - ~aligned_allocator() throw() + ~aligned_allocator() throw() { } - size_type max_size() const throw() + size_type max_size() const throw() { return std::numeric_limits<size_type>::max(); } @@ -362,24 +362,24 @@ return static_cast<pointer>( ei_aligned_malloc( num * sizeof(T) ) ); } - void construct( pointer p, const T& value ) + void construct( pointer p, const T& value ) { ::new( p ) T( value ); } - void destroy( pointer p ) + void destroy( pointer p ) { p->~T(); } - void deallocate( pointer p, size_type /*num*/ ) + void deallocate( pointer p, size_type /*num*/ ) { ei_aligned_free( p ); } - + bool operator!=(const aligned_allocator<T>& other) const { return false; } - + bool operator==(const aligned_allocator<T>& other) const { return true; } };
diff --git a/Eigen/src/Core/util/Meta.h b/Eigen/src/Core/util/Meta.h index 3a960be..2fdfd93 100644 --- a/Eigen/src/Core/util/Meta.h +++ b/Eigen/src/Core/util/Meta.h
@@ -64,6 +64,13 @@ template<typename T> struct ei_cleantype<const T*> { typedef typename ei_cleantype<T>::type type; }; template<typename T> struct ei_cleantype<T*> { typedef typename ei_cleantype<T>::type type; }; +template<typename T> struct ei_makeconst { typedef const T type; }; +template<typename T> struct ei_makeconst<const T> { typedef const T type; }; +template<typename T> struct ei_makeconst<T&> { typedef const T& type; }; +template<typename T> struct ei_makeconst<const T&> { typedef const T& type; }; +template<typename T> struct ei_makeconst<T*> { typedef const T* type; }; +template<typename T> struct ei_makeconst<const T*> { typedef const T* type; }; + /** \internal Allows to enable/disable an overload * according to a compile time condition. */