diff --git a/Eigen/src/Core/DiagonalMatrix.h b/Eigen/src/Core/DiagonalMatrix.h index 45375d5c8..06cfdc170 100644 --- a/Eigen/src/Core/DiagonalMatrix.h +++ b/Eigen/src/Core/DiagonalMatrix.h @@ -200,6 +200,10 @@ class DiagonalMatrix explicit EIGEN_STRONG_INLINE DiagonalMatrix(const std::initializer_list>& list) : m_diagonal(list) {} + /** \brief Constructs a DiagonalMatrix from an r-value diagonal vector type */ + EIGEN_DEVICE_FUNC + explicit inline DiagonalMatrix(DiagonalVectorType&& diag) : m_diagonal(std::move(diag)) {} + /** Copy constructor. */ template EIGEN_DEVICE_FUNC diff --git a/Eigen/src/Geometry/Scaling.h b/Eigen/src/Geometry/Scaling.h index 48a192ed0..8bcdce634 100644 --- a/Eigen/src/Geometry/Scaling.h +++ b/Eigen/src/Geometry/Scaling.h @@ -162,6 +162,11 @@ template inline const DiagonalWrapper Scaling(const MatrixBase& coeffs) { return coeffs.asDiagonal(); } +/** Constructs an axis aligned scaling expression from vector \a coeffs when passed as an rvalue reference */ +template +inline typename DiagonalWrapper::PlainObject Scaling(MatrixBase&& coeffs) +{ return typename DiagonalWrapper::PlainObject(std::move(coeffs.derived())); } + /** \deprecated */ typedef DiagonalMatrix AlignedScaling2f; /** \deprecated */