diff --git a/Eigen/src/Core/ProductEvaluators.h b/Eigen/src/Core/ProductEvaluators.h index 5955e496f659bd9f8273e08e627148accb55fabf..be55be5e89f3b8291c6a5c4b86ebb466fe947245 100644 --- a/Eigen/src/Core/ProductEvaluators.h +++ b/Eigen/src/Core/ProductEvaluators.h @@ -1272,6 +1272,14 @@ template struct generic_product_impl : generic_product_impl {}; +template +struct generic_product_impl + : generic_product_impl {}; + +template +struct generic_product_impl + : generic_product_impl {}; + } // end namespace internal } // end namespace Eigen diff --git a/test/geo_homogeneous.cpp b/test/geo_homogeneous.cpp index 638fbec1ee839dbde3d3ebd11bff68803f9c21a0..21be26d25c8983bdc8e5ec9389e3518767585d43 100644 --- a/test/geo_homogeneous.cpp +++ b/test/geo_homogeneous.cpp @@ -124,6 +124,15 @@ void homogeneous(void) { VERIFY_IS_APPROX(pts_xy1.transpose() * pts_xy1, pts_xy1.transpose() * pts_xy1.eval()); VERIFY_IS_APPROX(pts_xy2 * pts_xy2.transpose(), pts_xy2.eval() * pts_xy2.transpose()); } + + { + const Eigen::PermutationMatrix P{Eigen::Vector::EqualSpaced(0, 1)}; + const auto right = Eigen::Vector::Random().homogeneous(); + const auto left = Eigen::RowVector::Random().homogeneous(); + + VERIFY_IS_APPROX(P * right, P * right.eval()); + VERIFY_IS_APPROX(left * P, left.eval() * P); + } } EIGEN_DECLARE_TEST(geo_homogeneous) {