#include <Eigen/Core>

USING_PART_OF_NAMESPACE_EIGEN

using namespace std;

template<typename Scalar, typename Derived>
void foo(const MatrixBase<Scalar, Derived>& m)
{
  cout << "Here's m:" << endl << m << endl;
}

template<typename Scalar, typename Derived>
Eigen::ScalarMultiple<Derived>
twice(const MatrixBase<Scalar, Derived>& m)
{
  return 2 * m;
}

int main(int, char**)
{
  Matrix2d m = Matrix2d::random();
  foo(m);
  foo(twice(m));
  return 0;
}