1c981c48f5bc9aefeffc0bcb0cc3934c2fae179ddNarayan Kamath#include <Eigen/Core>
2c981c48f5bc9aefeffc0bcb0cc3934c2fae179ddNarayan Kamath#include <iostream>
3c981c48f5bc9aefeffc0bcb0cc3934c2fae179ddNarayan Kamathusing namespace Eigen;
4c981c48f5bc9aefeffc0bcb0cc3934c2fae179ddNarayan Kamathusing namespace std;
5c981c48f5bc9aefeffc0bcb0cc3934c2fae179ddNarayan Kamath
6c981c48f5bc9aefeffc0bcb0cc3934c2fae179ddNarayan Kamathtemplate<typename Derived>
7c981c48f5bc9aefeffc0bcb0cc3934c2fae179ddNarayan KamathEigen::VectorBlock<Derived, 2>
8c981c48f5bc9aefeffc0bcb0cc3934c2fae179ddNarayan KamathfirstTwo(MatrixBase<Derived>& v)
9c981c48f5bc9aefeffc0bcb0cc3934c2fae179ddNarayan Kamath{
10c981c48f5bc9aefeffc0bcb0cc3934c2fae179ddNarayan Kamath  return Eigen::VectorBlock<Derived, 2>(v.derived(), 0);
11c981c48f5bc9aefeffc0bcb0cc3934c2fae179ddNarayan Kamath}
12c981c48f5bc9aefeffc0bcb0cc3934c2fae179ddNarayan Kamath
13c981c48f5bc9aefeffc0bcb0cc3934c2fae179ddNarayan Kamathtemplate<typename Derived>
14c981c48f5bc9aefeffc0bcb0cc3934c2fae179ddNarayan Kamathconst Eigen::VectorBlock<const Derived, 2>
15c981c48f5bc9aefeffc0bcb0cc3934c2fae179ddNarayan KamathfirstTwo(const MatrixBase<Derived>& v)
16c981c48f5bc9aefeffc0bcb0cc3934c2fae179ddNarayan Kamath{
17c981c48f5bc9aefeffc0bcb0cc3934c2fae179ddNarayan Kamath  return Eigen::VectorBlock<const Derived, 2>(v.derived(), 0);
18c981c48f5bc9aefeffc0bcb0cc3934c2fae179ddNarayan Kamath}
19c981c48f5bc9aefeffc0bcb0cc3934c2fae179ddNarayan Kamath
20c981c48f5bc9aefeffc0bcb0cc3934c2fae179ddNarayan Kamathint main(int, char**)
21c981c48f5bc9aefeffc0bcb0cc3934c2fae179ddNarayan Kamath{
22c981c48f5bc9aefeffc0bcb0cc3934c2fae179ddNarayan Kamath  Matrix<int,1,6> v; v << 1,2,3,4,5,6;
23c981c48f5bc9aefeffc0bcb0cc3934c2fae179ddNarayan Kamath  cout << firstTwo(4*v) << endl; // calls the const version
24c981c48f5bc9aefeffc0bcb0cc3934c2fae179ddNarayan Kamath  firstTwo(v) *= 2;              // calls the non-const version
25c981c48f5bc9aefeffc0bcb0cc3934c2fae179ddNarayan Kamath  cout << "Now the vector v is:" << endl << v << endl;
26c981c48f5bc9aefeffc0bcb0cc3934c2fae179ddNarayan Kamath  return 0;
27c981c48f5bc9aefeffc0bcb0cc3934c2fae179ddNarayan Kamath}
28