fix ICC internal compilation error

This commit is contained in:
Gael Guennebaud
2009-02-10 14:15:32 +00:00
parent 40ad661183
commit a0cc5fba0a
2 changed files with 11 additions and 10 deletions

View File

@@ -359,7 +359,7 @@ template<typename Derived> class MatrixBase
const Eigen::Transpose<Derived> transpose() const;
void transposeInPlace();
const AdjointReturnType adjoint() const;
Eigen::Reverse<Derived, BothDirections> reverse();
const Eigen::Reverse<Derived, BothDirections> reverse() const;
void reverseInPlace();
@@ -617,6 +617,7 @@ template<typename Derived> class MatrixBase
PlainMatrixType cross(const MatrixBase<OtherDerived>& other) const;
PlainMatrixType unitOrthogonal(void) const;
Matrix<Scalar,3,1> eulerAngles(int a0, int a1, int a2) const;
const ScalarMultipleReturnType operator*(const UniformScaling<Scalar>& s) const;
/////////// Sparse module ///////////

View File

@@ -60,8 +60,8 @@ public:
/** Constructs and initialize a uniform scaling transformation */
explicit inline UniformScaling(const Scalar& s) : m_factor(s) {}
const Scalar& factor() const { return m_factor; }
Scalar& factor() { return m_factor; }
inline const Scalar& factor() const { return m_factor; }
inline Scalar& factor() { return m_factor; }
/** Concatenates two uniform scaling */
inline UniformScaling operator* (const UniformScaling& other) const
@@ -81,13 +81,6 @@ public:
inline typename ei_eval<Derived>::type operator* (const MatrixBase<Derived>& other) const
{ return other * m_factor; }
/** Concatenates a linear transformation matrix and a uniform scaling */
// TODO returns an expression
template<typename Derived>
friend inline typename ei_eval<Derived>::type
operator* (const MatrixBase<Derived>& other, const UniformScaling& s)
{ return other * s.factor(); }
template<typename Derived,int Dim>
inline Matrix<Scalar,Dim,Dim> operator*(const RotationBase<Derived,Dim>& r) const
{ return r.toRotationMatrix() * m_factor; }
@@ -119,6 +112,13 @@ public:
};
/** Concatenates a linear transformation matrix and a uniform scaling */
// NOTE this operator is defiend in MatrixBase and not as a friend function
// of UniformScaling to fix an internal crash of Intel's ICC
template<typename Derived> const typename MatrixBase<Derived>::ScalarMultipleReturnType
MatrixBase<Derived>::operator*(const UniformScaling<Scalar>& s) const
{ return derived() * s.factor(); }
/** Constructs a uniform scaling from scale factor \a s */
static inline UniformScaling<float> Scaling(float s) { return UniformScaling<float>(s); }
/** Constructs a uniform scaling from scale factor \a s */