aboutsummaryrefslogtreecommitdiffhomepage
path: root/Eigen/src/Core/CoreEvaluators.h
diff options
context:
space:
mode:
Diffstat (limited to 'Eigen/src/Core/CoreEvaluators.h')
-rw-r--r--Eigen/src/Core/CoreEvaluators.h14
1 files changed, 8 insertions, 6 deletions
diff --git a/Eigen/src/Core/CoreEvaluators.h b/Eigen/src/Core/CoreEvaluators.h
index 1d4ef8032..cc8477598 100644
--- a/Eigen/src/Core/CoreEvaluators.h
+++ b/Eigen/src/Core/CoreEvaluators.h
@@ -793,10 +793,12 @@ protected:
// evaluator_impl_wrapper_base<T> is a common base class for the
// MatrixWrapper and ArrayWrapper evaluators.
-template<typename ArgType>
+template<typename XprType>
struct evaluator_impl_wrapper_base
- : evaluator_impl_base<ArgType>
+ : evaluator_impl_base<XprType>
{
+ typedef typename remove_all<typename XprType::NestedExpressionType>::type ArgType;
+
evaluator_impl_wrapper_base(const ArgType& arg) : m_argImpl(arg) {}
typedef typename ArgType::Index Index;
@@ -855,23 +857,23 @@ protected:
template<typename ArgType>
struct evaluator_impl<MatrixWrapper<ArgType> >
- : evaluator_impl_wrapper_base<ArgType>
+ : evaluator_impl_wrapper_base<MatrixWrapper<ArgType> >
{
typedef MatrixWrapper<ArgType> XprType;
evaluator_impl(const XprType& wrapper)
- : evaluator_impl_wrapper_base<ArgType>(wrapper.nestedExpression())
+ : evaluator_impl_wrapper_base<MatrixWrapper<ArgType> >(wrapper.nestedExpression())
{ }
};
template<typename ArgType>
struct evaluator_impl<ArrayWrapper<ArgType> >
- : evaluator_impl_wrapper_base<ArgType>
+ : evaluator_impl_wrapper_base<ArrayWrapper<ArgType> >
{
typedef ArrayWrapper<ArgType> XprType;
evaluator_impl(const XprType& wrapper)
- : evaluator_impl_wrapper_base<ArgType>(wrapper.nestedExpression())
+ : evaluator_impl_wrapper_base<ArrayWrapper<ArgType> >(wrapper.nestedExpression())
{ }
};