diff --git a/Eigen/src/Core/ProductEvaluators.h b/Eigen/src/Core/ProductEvaluators.h index ee87da66d..2f199bc29 100644 --- a/Eigen/src/Core/ProductEvaluators.h +++ b/Eigen/src/Core/ProductEvaluators.h @@ -100,8 +100,8 @@ struct evaluator_traits > // This is the default evaluator implementation for products: // It creates a temporary and call generic_product_impl template -struct product_evaluator, ProductTag, LhsShape, RhsShape, typename traits::Scalar, - typename enable_if<(Options==DefaultProduct || Options==AliasFreeProduct),typename traits::Scalar>::type> +struct product_evaluator, ProductTag, LhsShape, RhsShape, typename traits::Scalar, typename traits::Scalar, + EnableIf<(Options==DefaultProduct || Options==AliasFreeProduct)> > : public evaluator::PlainObject>::type { typedef Product XprType; diff --git a/Eigen/src/Core/util/ForwardDeclarations.h b/Eigen/src/Core/util/ForwardDeclarations.h index c287c1023..ba75d25af 100644 --- a/Eigen/src/Core/util/ForwardDeclarations.h +++ b/Eigen/src/Core/util/ForwardDeclarations.h @@ -147,6 +147,9 @@ template struct product_type; + +template struct EnableIf; + /** \internal * \class product_evaluator * Products need their own evaluator with more template arguments allowing for @@ -157,7 +160,8 @@ template< typename T, typename LhsShape = typename evaluator_traits::Shape, typename RhsShape = typename evaluator_traits::Shape, typename LhsScalar = typename traits::Scalar, - typename RhsScalar = typename traits::Scalar + typename RhsScalar = typename traits::Scalar, + typename = EnableIf // extra template parameter for SFINAE-based specialization > struct product_evaluator; }