title: Workaround for resizing Eigen::Ref
body: <p>I want to use Eigen::Ref to have non-template functions using Eigen::Matrix arguments. My problem is that in these functions, I may have to resize the matrices referenced by the Eigen::Ref. I understand that for generality an Eigen::Ref should not be resized because it can map to an expression or a matrix block, but In my case, I am sure that what is behind my Eigen::Ref is an Eigen::Matrix.</p>
  
  <p>To illustrate this:</p>
  
  <pre><code>#include "Eigen/Dense"
  
  void add(Eigen::Ref&lt;Eigen::MatrixXd&gt; M, const Eigen::Ref&lt;const Eigen::MatrixXd&gt; &amp;A, const Eigen::Ref&lt;const Eigen::MatrixXd&gt; &amp;B) {
    M=A+B;
  }
  
  int main() {
    Eigen::Matrix&lt;double, Eigen::Dynamic, Eigen::Dynamic, Eigen::ColMajor, 32, 32&gt; M(2,3);
    Eigen::Matrix&lt;double, 2, 2&gt; A;
    Eigen::Matrix&lt;double, 2, 2&gt; B;
  
    add(M,A,B);
  }
  </code></pre>
  
  <p>gives at runtime:</p>
  
  <pre><code>void Eigen::DenseBase&lt;Derived&gt;::resize(Eigen::Index, Eigen::Index) [with Derived = Eigen::Ref&lt;Eigen::Matrix&lt;double, -1, -1&gt; &gt;; Eigen::Index = long int]: Assertion `rows == this-&gt;rows() &amp;&amp; cols == this-&gt;cols() &amp;&amp; "DenseBase::resize() does not actually allow to resize."' failed.
  </code></pre>
  
  <p>I tried to cheat it:</p>
  
  <pre><code>void add(Eigen::Ref&lt;Eigen::MatrixXd&gt; M, const Eigen::Ref&lt;const Eigen::MatrixXd&gt; &amp;A, const Eigen::Ref&lt;const Eigen::MatrixXd&gt; &amp;B) {
    Eigen::Ref&lt;Eigen::Matrix&lt;double,2,2&gt;&gt; MM(M);
    MM=A+B;
  }
  </code></pre>
  
  <p>but I got at runtime:</p>
  
  <pre><code>Eigen::internal::variable_if_dynamic&lt;T, Value&gt;::variable_if_dynamic(T) [with T = long int; int Value = 2]: Assertion `v == T(Value)' failed.
  </code></pre>
  
  <p>So, what could I do to handle this? In the Eigen documentation, the problem of resizing is addressed for template functions using MatrixBase as arguments, but for Eigen::Ref? </p>