#include <Eigen/Dense> #include <iostream> template <typename Derived1, typename Derived2> void copyUpperTriangularPart(Eigen::MatrixBase<Derived1>& dst, const Eigen::MatrixBase<Derived2>& src) { /* Note the 'template' keywords in the following line! */ dst.template triangularView<Eigen::Upper>() = src.template triangularView<Eigen::Upper>(); } int main() { Eigen::MatrixXi m1 = Eigen::MatrixXi::Ones(5, 5); Eigen::MatrixXi m2 = Eigen::MatrixXi::Random(4, 4); std::cout << "m2 before copy:" << std::endl; std::cout << m2 << std::endl << std::endl; copyUpperTriangularPart(m2, m1.topLeftCorner(4, 4)); std::cout << "m2 after copy:" << std::endl; std::cout << m2 << std::endl << std::endl; }