diff options
author | Gael Guennebaud <g.gael@free.fr> | 2013-08-11 17:52:43 +0200 |
---|---|---|
committer | Gael Guennebaud <g.gael@free.fr> | 2013-08-11 17:52:43 +0200 |
commit | 6719e56b5bfe9ae4badc9a6e894c5824f663d62e (patch) | |
tree | 975a7bb2e9f1bf605814309fc7120cdb097b29ca | |
parent | c13e9bbabf885abad49aafb77535192262355448 (diff) |
Ref<> objects must be nested by reference because they potentially store a temporary object
-rw-r--r-- | Eigen/src/Core/Ref.h | 5 | ||||
-rw-r--r-- | test/ref.cpp | 4 | ||||
-rw-r--r-- | unsupported/Eigen/src/AutoDiff/AutoDiffScalar.h | 2 | ||||
-rw-r--r-- | unsupported/Eigen/src/MatrixFunctions/MatrixPower.h | 2 |
4 files changed, 7 insertions, 6 deletions
diff --git a/Eigen/src/Core/Ref.h b/Eigen/src/Core/Ref.h index aba795bdb..00d9e6d2b 100644 --- a/Eigen/src/Core/Ref.h +++ b/Eigen/src/Core/Ref.h @@ -94,7 +94,8 @@ struct traits<Ref<_PlainObjectType, _Options, _StrideType> > typedef _PlainObjectType PlainObjectType; typedef _StrideType StrideType; enum { - Options = _Options + Options = _Options, + Flags = traits<Map<_PlainObjectType, _Options, _StrideType> >::Flags | NestByRefBit }; template<typename Derived> struct match { @@ -111,7 +112,7 @@ struct traits<Ref<_PlainObjectType, _Options, _StrideType> > }; typedef typename internal::conditional<MatchAtCompileTime,internal::true_type,internal::false_type>::type type; }; - + }; template<typename Derived> diff --git a/test/ref.cpp b/test/ref.cpp index 65b4f5a3e..f639d900b 100644 --- a/test/ref.cpp +++ b/test/ref.cpp @@ -14,9 +14,9 @@ static int nb_temporaries; -inline void on_temporary_creation(int size) { +inline void on_temporary_creation(int) { // here's a great place to set a breakpoint when debugging failures in this test! - if(size!=0) nb_temporaries++; + nb_temporaries++; } diff --git a/unsupported/Eigen/src/AutoDiff/AutoDiffScalar.h b/unsupported/Eigen/src/AutoDiff/AutoDiffScalar.h index 8d42e69b9..763ed414a 100644 --- a/unsupported/Eigen/src/AutoDiff/AutoDiffScalar.h +++ b/unsupported/Eigen/src/AutoDiff/AutoDiffScalar.h @@ -604,7 +604,7 @@ atan2(const AutoDiffScalar<DerTypeA>& a, const AutoDiffScalar<DerTypeB>& b) Scalar tmp4 = tmp3/(tmp2+tmp3); if (tmp4!=0) - ret.derivatives() = (a.derivatives() * b.value() - a.value() * b.derivatives()) * (tmp2+tmp3); + ret.derivatives() = (a.value() * b.derivatives() - a.derivatives() * b.value()) * (tmp2+tmp3); return ret; } diff --git a/unsupported/Eigen/src/MatrixFunctions/MatrixPower.h b/unsupported/Eigen/src/MatrixFunctions/MatrixPower.h index ee665c18e..b91d8632a 100644 --- a/unsupported/Eigen/src/MatrixFunctions/MatrixPower.h +++ b/unsupported/Eigen/src/MatrixFunctions/MatrixPower.h @@ -299,7 +299,7 @@ MatrixPowerAtomic<MatrixType>::computeSuperDiag(const ComplexScalar& curr, const ComplexScalar logCurr = log(curr); ComplexScalar logPrev = log(prev); int unwindingNumber = ceil((numext::imag(logCurr - logPrev) - M_PI) / (2*M_PI)); - ComplexScalar w = numext::atanh2(curr - prev, curr + prev) + ComplexScalar(0, M_PI*unwindingNumber); + ComplexScalar w = numext::atanh2(curr - prev, curr + prev) + ComplexScalar(RealScalar(0), RealScalar(M_PI*unwindingNumber)); return RealScalar(2) * exp(RealScalar(0.5) * p * (logCurr + logPrev)) * sinh(p * w) / (curr - prev); } |