back out previous back out, and this time don't forget
to include the NumTraits.h file in the commit ;)
diff --git a/Eigen/src/Core/Functors.h b/Eigen/src/Core/Functors.h
index cbaeb83..ef4485f 100644
--- a/Eigen/src/Core/Functors.h
+++ b/Eigen/src/Core/Functors.h
@@ -350,7 +350,7 @@
   EIGEN_STRONG_INLINE Scalar operator() (const Scalar& a) const { return a * m_other; }
   EIGEN_STRONG_INLINE const PacketScalar packetOp(const PacketScalar& a) const
   { return ei_pmul(a, ei_pset1(m_other)); }
-  const Scalar m_other;
+  const typename NumTraits<Scalar>::Nested m_other;
 private:
   ei_scalar_multiple_op& operator=(const ei_scalar_multiple_op&);
 };
@@ -364,7 +364,7 @@
   EIGEN_STRONG_INLINE ei_scalar_multiple2_op(const ei_scalar_multiple2_op& other) : m_other(other.m_other) { }
   EIGEN_STRONG_INLINE ei_scalar_multiple2_op(const Scalar2& other) : m_other(other) { }
   EIGEN_STRONG_INLINE result_type operator() (const Scalar1& a) const { return a * m_other; }
-  const Scalar2 m_other;
+  const typename NumTraits<Scalar2>::Nested m_other;
 };
 template<typename Scalar1,typename Scalar2>
 struct ei_functor_traits<ei_scalar_multiple2_op<Scalar1,Scalar2> >
@@ -393,7 +393,7 @@
   EIGEN_STRONG_INLINE ei_scalar_quotient1_impl(const ei_scalar_quotient1_impl& other) : m_other(other.m_other) { }
   EIGEN_STRONG_INLINE ei_scalar_quotient1_impl(const Scalar& other) : m_other(other) {}
   EIGEN_STRONG_INLINE Scalar operator() (const Scalar& a) const { return a / m_other; }
-  const Scalar m_other;
+  const typename NumTraits<Scalar>::Nested m_other;
 };
 template<typename Scalar>
 struct ei_functor_traits<ei_scalar_quotient1_impl<Scalar,false> >
diff --git a/Eigen/src/Core/NumTraits.h b/Eigen/src/Core/NumTraits.h
index 24afe54..304e2c1 100644
--- a/Eigen/src/Core/NumTraits.h
+++ b/Eigen/src/Core/NumTraits.h
@@ -52,6 +52,7 @@
 {
   typedef int Real;
   typedef double FloatingPoint;
+  typedef int Nested;
   enum {
     IsComplex = 0,
     HasFloatingPoint = 0,
@@ -65,6 +66,7 @@
 {
   typedef float Real;
   typedef float FloatingPoint;
+  typedef float Nested;
   enum {
     IsComplex = 0,
     HasFloatingPoint = 1,
@@ -78,6 +80,7 @@
 {
   typedef double Real;
   typedef double FloatingPoint;
+  typedef double Nested;
   enum {
     IsComplex = 0,
     HasFloatingPoint = 1,
@@ -91,6 +94,7 @@
 {
   typedef _Real Real;
   typedef std::complex<_Real> FloatingPoint;
+  typedef std::complex<_Real> Nested;
   enum {
     IsComplex = 1,
     HasFloatingPoint = NumTraits<Real>::HasFloatingPoint,
@@ -104,6 +108,7 @@
 {
   typedef long long int Real;
   typedef long double FloatingPoint;
+  typedef long long int Nested;
   enum {
     IsComplex = 0,
     HasFloatingPoint = 0,
@@ -117,6 +122,7 @@
 {
   typedef long double Real;
   typedef long double FloatingPoint;
+  typedef long double Nested;
   enum {
     IsComplex = 0,
     HasFloatingPoint = 1,
@@ -130,6 +136,7 @@
 {
   typedef bool Real;
   typedef float FloatingPoint;
+  typedef bool Nested;
   enum {
     IsComplex = 0,
     HasFloatingPoint = 0,