title: Passing Arguments as Ref type deduction
body: <p>i my settings looks like:</p>
  
  <pre><code>class Base
  {
    public:
      virtual void eval(const Ref&lt; const Matrix&lt;float,Dynamic,1&gt;&gt; in, Ref&lt;Matrix&lt;float,Dynamic,1&gt;&gt; out) = 0;
      virtual void eval( const Ref&lt; const Matrix&lt;float,Dynamic,Dynamic,RowMajor&gt;&gt; inp, Ref&lt;Matrix&lt;float,Dynamic,Dynamic,RowMajor&gt;&gt; out) = 0;
  };
  
  class Test : Base
  {
    public:
    void eval(const Ref&lt; const Matrix&lt;float,Dynamic,1&gt;&gt; in, Ref&lt;Matrix&lt;float,Dynamic,1&gt;&gt; out) override
    {
        out = in;
    };
  
  void eval( const Ref&lt; const Matrix&lt;float,Dynamic,Dynamic,RowMajor&gt;&gt; in, Ref&lt;Matrix&lt;float,Dynamic,Dynamic,RowMajor&gt;&gt; out)override
  {
      for(std::size_t i=0;i&lt;in.rows();i++)
        eval( in.row(i).transpose(), out.row(i).transpose() );
  };
  };
  </code></pre>
  
  <p>The compiler Error looks like:</p>
  
  <pre><code>In file included from main.cc:2:0:
  ../tmp.hpp: In member function ‘virtual void eval(Eigen::Ref&lt;const Eigen::Matrix&lt;float, -1, -1, 1&gt; &gt;, Eigen::Ref&lt;Eigen::Matrix&lt;float, -1, -1, 1&gt; &gt;)’:
  ../tmp.hpp:36:62: error: call of overloaded ‘eval(Eigen::DenseBase&lt;Eigen::Block&lt;const Eigen::Ref&lt;const Eigen::Matrix&lt;float, -1, -1, 1&gt; &gt;, 1, -1, true&gt; &gt;::ConstTransposeReturnType, Eigen::Transpose&lt;Eigen::Block&lt;Eigen::Ref&lt;Eigen::Matrix&lt;float, -1, -1, 1&gt; &gt;, 1, -1, true&gt; &gt;)’ is ambiguous
      eval( in.row(i).transpose(), out.row(i).transpose() );
                                                                ^
  ../tmp.hpp:25:7: note: candidate: virtual void eval(Eigen::Ref&lt;const Eigen::Matrix&lt;float, -1, 1&gt; &gt;, Eigen::Ref&lt;Eigen::Matrix&lt;float, -1, 1&gt; &gt;)
    void eval(const Ref&lt;const Matrix&lt;float, Dynamic, 1&gt;&gt; input,
         ^
  ../tmp.hpp:32:7: note: candidate: virtual void eval(Eigen::Ref&lt;const Eigen::Matrix&lt;float, -1, -1, 1&gt; &gt;, Eigen::Ref&lt;Eigen::Matrix&lt;float, -1, -1, 1&gt; &gt;)
    void eval(const Ref&lt;const Matrix&lt;float, Dynamic, Dynamic, RowMajor&gt;&gt; input,
         ^
  make: *** [main.o] Error 1
  </code></pre>
  
  <p>I found <a href="http://eigen.tuxfamily.org/dox/TopicFunctionTakingEigenTypes.html" rel="nofollow">this</a>. The types doesn't match, but for me it is not clear how to solve this elegant ( without template's because of the base class )</p>