From a5a7b68b762242022b75b4c816a6501aae112990 Mon Sep 17 00:00:00 2001 From: Gael Guennebaud Date: Fri, 19 Jun 2015 17:25:13 +0200 Subject: [PATCH] Fix ambiguous instanciation using clean class-level SFINAE in product_evaluator --- Eigen/src/Core/ProductEvaluators.h | 4 ++-- Eigen/src/Core/util/ForwardDeclarations.h | 6 +++++- 2 files changed, 7 insertions(+), 3 deletions(-) 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; }