struct pad { Index size() const { return out_size; } Index operator[](Index i) const { return std::max(0, i - (out_size - in_size)); } Index in_size, out_size; }; Matrix3i A; A.reshaped() = VectorXi::LinSpaced(9, 1, 9); cout << "Initial matrix A:\n" << A << "\n\n"; MatrixXi B(5, 5); B = A(pad{3, 5}, pad{3, 5}); cout << "A(pad{3,N}, pad{3,N}):\n" << B << "\n\n";