aboutsummaryrefslogtreecommitdiffhomepage
path: root/Eigen/src
diff options
context:
space:
mode:
authorGravatar Gael Guennebaud <g.gael@free.fr>2015-06-19 17:25:13 +0200
committerGravatar Gael Guennebaud <g.gael@free.fr>2015-06-19 17:25:13 +0200
commita5a7b68b762242022b75b4c816a6501aae112990 (patch)
tree989ac862b0fbf72c716c70a96542c49d44d4575c /Eigen/src
parent6fc54382058350a4247989f82f3ad1af1ba41d7d (diff)
Fix ambiguous instanciation using clean class-level SFINAE in product_evaluator
Diffstat (limited to 'Eigen/src')
-rw-r--r--Eigen/src/Core/ProductEvaluators.h4
-rw-r--r--Eigen/src/Core/util/ForwardDeclarations.h6
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<Product<Lhs, Rhs, AliasFreeProduct> >
// This is the default evaluator implementation for products:
// It creates a temporary and call generic_product_impl
template<typename Lhs, typename Rhs, int Options, int ProductTag, typename LhsShape, typename RhsShape>
-struct product_evaluator<Product<Lhs, Rhs, Options>, ProductTag, LhsShape, RhsShape, typename traits<Lhs>::Scalar,
- typename enable_if<(Options==DefaultProduct || Options==AliasFreeProduct),typename traits<Rhs>::Scalar>::type>
+struct product_evaluator<Product<Lhs, Rhs, Options>, ProductTag, LhsShape, RhsShape, typename traits<Lhs>::Scalar, typename traits<Rhs>::Scalar,
+ EnableIf<(Options==DefaultProduct || Options==AliasFreeProduct)> >
: public evaluator<typename Product<Lhs, Rhs, Options>::PlainObject>::type
{
typedef Product<Lhs, Rhs, Options> 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<typename _Scalar, int Rows=Dynamic, int Cols=Dynamic, int Supers=Dynami
namespace internal {
template<typename Lhs, typename Rhs> struct product_type;
+
+template<bool> 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<typename T::Lhs>::Shape,
typename RhsShape = typename evaluator_traits<typename T::Rhs>::Shape,
typename LhsScalar = typename traits<typename T::Lhs>::Scalar,
- typename RhsScalar = typename traits<typename T::Rhs>::Scalar
+ typename RhsScalar = typename traits<typename T::Rhs>::Scalar,
+ typename = EnableIf<true> // extra template parameter for SFINAE-based specialization
> struct product_evaluator;
}