mirror of
https://gitlab.com/libeigen/eigen.git
synced 2025-06-20 22:52:51 +08:00
workaround ICC 11.1 compilation issue
This commit is contained in:
parent
7e36d32b32
commit
28d0a8580e
@ -468,15 +468,40 @@ public:
|
|||||||
{
|
{
|
||||||
return internal::transform_transform_product_impl<Transform,Transform>::run(*this,other);
|
return internal::transform_transform_product_impl<Transform,Transform>::run(*this,other);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
#ifdef __INTEL_COMPILER
|
||||||
|
private:
|
||||||
|
// this intermediate structure permits to workaround a bug in ICC 11:
|
||||||
|
// error: template instantiation resulted in unexpected function type of "Eigen::Transform<double, 3, 32, 0>
|
||||||
|
// (const Eigen::Transform<double, 3, 2, 0> &) const"
|
||||||
|
// (the meaning of a name may have changed since the template declaration -- the type of the template is:
|
||||||
|
// "Eigen::internal::transform_transform_product_impl<Eigen::Transform<double, 3, 32, 0>,
|
||||||
|
// Eigen::Transform<double, 3, Mode, Options>, <expression>>::ResultType (const Eigen::Transform<double, 3, Mode, Options> &) const")
|
||||||
|
//
|
||||||
|
template<int OtherMode,int OtherOptions> struct icc_11_workaround
|
||||||
|
{
|
||||||
|
typedef internal::transform_transform_product_impl<Transform,Transform<Scalar,Dim,OtherMode,OtherOptions> > ProductType;
|
||||||
|
typedef typename ProductType::ResultType ResultType;
|
||||||
|
};
|
||||||
|
|
||||||
|
public:
|
||||||
/** Concatenates two different transformations */
|
/** Concatenates two different transformations */
|
||||||
template<int OtherMode,int OtherOptions>
|
template<int OtherMode,int OtherOptions>
|
||||||
inline const typename internal::transform_transform_product_impl<
|
inline typename icc_11_workaround<OtherMode,OtherOptions>::ResultType
|
||||||
Transform,Transform<Scalar,Dim,OtherMode,OtherOptions> >::ResultType
|
operator * (const Transform<Scalar,Dim,OtherMode,OtherOptions>& other) const
|
||||||
|
{
|
||||||
|
typedef typename icc_11_workaround<OtherMode,OtherOptions>::ProductType ProductType;
|
||||||
|
return ProductType::run(*this,other);
|
||||||
|
}
|
||||||
|
#else
|
||||||
|
/** Concatenates two different transformations */
|
||||||
|
template<int OtherMode,int OtherOptions>
|
||||||
|
inline typename internal::transform_transform_product_impl<Transform,Transform<Scalar,Dim,OtherMode,OtherOptions> >::ResultType
|
||||||
operator * (const Transform<Scalar,Dim,OtherMode,OtherOptions>& other) const
|
operator * (const Transform<Scalar,Dim,OtherMode,OtherOptions>& other) const
|
||||||
{
|
{
|
||||||
return internal::transform_transform_product_impl<Transform,Transform<Scalar,Dim,OtherMode,OtherOptions> >::run(*this,other);
|
return internal::transform_transform_product_impl<Transform,Transform<Scalar,Dim,OtherMode,OtherOptions> >::run(*this,other);
|
||||||
}
|
}
|
||||||
|
#endif
|
||||||
|
|
||||||
/** \sa MatrixBase::setIdentity() */
|
/** \sa MatrixBase::setIdentity() */
|
||||||
void setIdentity() { m_matrix.setIdentity(); }
|
void setIdentity() { m_matrix.setIdentity(); }
|
||||||
|
Loading…
x
Reference in New Issue
Block a user