From a0cc5fba0a3dc600e858720c9fcde3a9c13e740a Mon Sep 17 00:00:00 2001 From: Gael Guennebaud Date: Tue, 10 Feb 2009 14:15:32 +0000 Subject: [PATCH] fix ICC internal compilation error --- Eigen/src/Core/MatrixBase.h | 3 ++- Eigen/src/Geometry/Scaling.h | 18 +++++++++--------- 2 files changed, 11 insertions(+), 10 deletions(-) diff --git a/Eigen/src/Core/MatrixBase.h b/Eigen/src/Core/MatrixBase.h index 70d8b9ded..71eba430b 100644 --- a/Eigen/src/Core/MatrixBase.h +++ b/Eigen/src/Core/MatrixBase.h @@ -359,7 +359,7 @@ template class MatrixBase const Eigen::Transpose transpose() const; void transposeInPlace(); const AdjointReturnType adjoint() const; - + Eigen::Reverse reverse(); const Eigen::Reverse reverse() const; void reverseInPlace(); @@ -617,6 +617,7 @@ template class MatrixBase PlainMatrixType cross(const MatrixBase& other) const; PlainMatrixType unitOrthogonal(void) const; Matrix eulerAngles(int a0, int a1, int a2) const; + const ScalarMultipleReturnType operator*(const UniformScaling& s) const; /////////// Sparse module /////////// diff --git a/Eigen/src/Geometry/Scaling.h b/Eigen/src/Geometry/Scaling.h index 22e356964..89fe3d6d5 100644 --- a/Eigen/src/Geometry/Scaling.h +++ b/Eigen/src/Geometry/Scaling.h @@ -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::type operator* (const MatrixBase& other) const { return other * m_factor; } - /** Concatenates a linear transformation matrix and a uniform scaling */ - // TODO returns an expression - template - friend inline typename ei_eval::type - operator* (const MatrixBase& other, const UniformScaling& s) - { return other * s.factor(); } - template inline Matrix operator*(const RotationBase& 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 const typename MatrixBase::ScalarMultipleReturnType +MatrixBase::operator*(const UniformScaling& s) const +{ return derived() * s.factor(); } + /** Constructs a uniform scaling from scale factor \a s */ static inline UniformScaling Scaling(float s) { return UniformScaling(s); } /** Constructs a uniform scaling from scale factor \a s */