title: avoid eval when calling functions which are overloaded for different eigen matrix types
body: <p>I often find myself overloading functions for different eigen matrix types.
  Depending on how i call them, there's the need to explicitly call eval() on the parameters to hint at the right overload, f.e. when all are lazy evaluated CwiseBinaryOps:</p>
  <pre><code>#include &lt;Eigen/Dense&gt;
  void ef(Eigen::Vector2d const&amp; v) {}
  void ef(Eigen::Vector3d const&amp; v) {}
  int main() {
      ef(Eigen::Vector3d() + Eigen::Vector3d()); // ambiguous call to overloaded function
      ef((Eigen::Vector3d() + Eigen::Vector3d()).eval());
  }
  </code></pre>
  <p>Here's a <a href="https://godbolt.org/z/h7MzE6" rel="nofollow noreferrer">godbolt</a>.</p>
  <p>Are there ways to avoid this?</p>