title: the code works in Eigen 3.2 but fails in Eigen 3.4. Anyone know the reason？
body: <p>the following code can be compiled successfuly by Eigen 3.2: g++ -std=c++11 test.cpp -o test -isystem /eigen-3.2.1</p>
  <pre><code>#include &lt;iostream&gt;
  #include &lt;Eigen/Core&gt;
  #include &lt;Eigen/Dense&gt;
  using namespace std;
  using namespace Eigen;
  
  int main()
  {
      typedef Eigen::MatrixXcf CMatrix;
      typedef Eigen::Array&lt;CMatrix, Eigen::Dynamic, Eigen::Dynamic&gt; CMMatrix;
      CMMatrix a = CMMatrix::Constant(4, 4,CMatrix::Zero(3, 3));
      CMMatrix b = CMMatrix::Constant(4, 4,CMatrix::Zero(3, 3));
      CMMatrix c = a + b;
      return 0;
  }
  </code></pre>
  <p>But when I compile the above code by Eigen 3.4， it failed: g++ -std=c++11 test.cpp -o test  -isystem /eigen-3.4.0. And the error information is :</p>
  <pre><code>ambiguous overload for 'operator+' (operand types are 'CMMatrix {aka Eigen::Array&lt;Eigen::Matrix&lt;std::complex&lt;float&gt;, -1, -1&gt;, -1, -1&gt;}' and 'CMMatrix {aka Eigen::Array&lt;Eigen::Matrix&lt;std::complex&lt;float&gt;, -1, -1&gt;, -1, -1&gt;}')
       CMMatrix c = a + b;
  </code></pre>
  <p>Anyone know why? How can I fix the code by using Eigen 3.4?
  What's more, I change the code as follows:</p>
  <pre><code>#include &lt;iostream&gt;
  #include &lt;Eigen/Core&gt;
  #include &lt;Eigen/Dense&gt;
  using namespace std;
  using namespace Eigen;
  
  int main()
  {
      typedef Eigen::MatrixXcf CMatrix;
      typedef Eigen::Array&lt;CMatrix, Eigen::Dynamic, Eigen::Dynamic&gt; CMMatrix;
      CMMatrix a = CMMatrix::Constant(4, 4,CMatrix::Zero(3, 3));
      CMMatrix b = CMMatrix::Constant(4, 4,CMatrix::Zero(3, 3));
      CMMatrix c = a;
      c += b;
      return 0;
  }
  </code></pre>
  <p>Surprisingly, the above code can be compiled successfully. What's the reason?
  How can I fix the code by using  Eigen 3.4 elegently, but not the way &quot;c=a,c+=b;&quot;.
  Thanks a lot!</p>
  <hr />
  <p>The full eror information is as follows:</p>
  <pre><code>test_map.cpp:13:20: ambiguous overload for operator+ (operand types are CMMatrix {aka Eigen::Array&lt;Eigen::Matrix&lt;std::complex&lt;float&gt;, -1, -1&gt;, -1, -1&gt;} and CMMatrix {aka Eigen::Array&lt;Eigen::Matrix&lt;std::complex&lt;float&gt;, -1, -1&gt;, -1, -1&gt;})
           CMMatrix c = a + b;
                        ~~^~~
      In file included from /eigen-3.4.0/Eigen/Core:19:0,
                       from test_map.cpp:2:
      /eigen-3.4.0/Eigen/src/Core/../plugins/CommonCwiseBinaryOps.h:27:28: candidate: const Eigen::CwiseBinaryOp&lt;Eigen::internal::scalar_sum_op&lt;typename Eigen::internal::traits&lt;T&gt;::Scalar, typename Eigen::internal::traits&lt;OtherDerived&gt;::Scalar&gt;, const Derived, const OtherDerived&gt; Eigen::ArrayBase&lt;Derived&gt;::operator+(const Eigen::ArrayBase&lt;OtherDerived&gt;&amp;) const [with OtherDerived = Eigen::Array&lt;Eigen::Matrix&lt;std::complex&lt;float&gt;, -1, -1&gt;, -1, -1&gt;; Derived = Eigen::Array&lt;Eigen::Matrix&lt;std::complex&lt;float&gt;, -1, -1&gt;, -1, -1&gt;; typename Eigen::internal::traits&lt;OtherDerived&gt;::Scalar = Eigen::Matrix&lt;std::complex&lt;float&gt;, -1, -1&gt;; typename Eigen::internal::traits&lt;T&gt;::Scalar = Eigen::Matrix&lt;std::complex&lt;float&gt;, -1, -1&gt;]
       EIGEN_MAKE_CWISE_BINARY_OP(operator+,sum)
                                  ^
      /eigen-3.4.0/Eigen/src/Core/util/Macros.h:1339:4: in definition of macro \u2018EIGEN_MAKE_CWISE_BINARY_OP
         (METHOD)(const EIGEN_CURRENT_STORAGE_BASE_CLASS&lt;OtherDerived&gt; &amp;other) const \
          ^~~~~~
      /eigen-3.4.0/Eigen/src/Core/../plugins/ArrayCwiseBinaryOps.h:241:29: candidate: const Eigen::CwiseBinaryOp&lt;Eigen::internal::scalar_sum_op&lt;typename Eigen::internal::traits&lt;T&gt;::Scalar, typename Eigen::internal::promote_scalar_arg&lt;typename Eigen::internal::traits&lt;T&gt;::Scalar, T, Eigen::internal::has_ReturnType&lt;Eigen::ScalarBinaryOpTraits&lt;typename Eigen::internal::traits&lt;T&gt;::Scalar, T, Eigen::internal::scalar_sum_op&lt;typename Eigen::internal::traits&lt;T&gt;::Scalar, T&gt; &gt; &gt;::value&gt;::type&gt;, const Derived, const typename Eigen::internal::plain_constant_type&lt;Derived, typename Eigen::internal::promote_scalar_arg&lt;typename Eigen::internal::traits&lt;T&gt;::Scalar, T, Eigen::internal::has_ReturnType&lt;Eigen::ScalarBinaryOpTraits&lt;typename Eigen::internal::traits&lt;T&gt;::Scalar, T, Eigen::internal::scalar_sum_op&lt;typename Eigen::internal::traits&lt;T&gt;::Scalar, T&gt; &gt; &gt;::value&gt;::type&gt;::type&gt; Eigen::ArrayBase&lt;Derived&gt;::operator+(const T&amp;) const [with T = Eigen::Array&lt;Eigen::Matrix&lt;std::complex&lt;float&gt;, -1, -1&gt;, -1, -1&gt;; Derived = Eigen::Array&lt;Eigen::Matrix&lt;std::complex&lt;float&gt;, -1, -1&gt;, -1, -1&gt;; typename Eigen::internal::plain_constant_type&lt;Derived, typename Eigen::internal::promote_scalar_arg&lt;typename Eigen::internal::traits&lt;T&gt;::Scalar, T, Eigen::internal::has_ReturnType&lt;Eigen::ScalarBinaryOpTraits&lt;typename Eigen::internal::traits&lt;T&gt;::Scalar, T, Eigen::internal::scalar_sum_op&lt;typename Eigen::internal::traits&lt;T&gt;::Scalar, T&gt; &gt; &gt;::value&gt;::type&gt;::type = Eigen::CwiseNullaryOp&lt;Eigen::internal::scalar_constant_op&lt;Eigen::Matrix&lt;std::complex&lt;float&gt;, -1, -1&gt; &gt;, const Eigen::Array&lt;Eigen::Matrix&lt;std::complex&lt;float&gt;, -1, -1&gt;, -1, -1&gt; &gt;; typename Eigen::internal::promote_scalar_arg&lt;typename Eigen::internal::traits&lt;T&gt;::Scalar, T, Eigen::internal::has_ReturnType&lt;Eigen::ScalarBinaryOpTraits&lt;typename Eigen::internal::traits&lt;T&gt;::Scalar, T, Eigen::internal::scalar_sum_op&lt;typename Eigen::internal::traits&lt;T&gt;::Scalar, T&gt; &gt; &gt;::value&gt;::type = Eigen::Matrix&lt;std::complex&lt;float&gt;, -1, -1&gt;; typename Eigen::internal::traits&lt;T&gt;::Scalar = Eigen::Matrix&lt;std::complex&lt;float&gt;, -1, -1&gt;]
       EIGEN_MAKE_SCALAR_BINARY_OP(operator+,sum)
                                   ^
      /eigen-3.4.0/Eigen/src/Core/util/Macros.h:1365:4: in definition of macro EIGEN_MAKE_SCALAR_BINARY_OP_ONTHERIGHT
         (METHOD)(const T&amp; scalar) const { \
          ^~~~~~
      /eigen-3.4.0/Eigen/src/Core/../plugins/ArrayCwiseBinaryOps.h:241:1: in expansion of macro \u2018EIGEN_MAKE_SCALAR_BINARY_OP
       EIGEN_MAKE_SCALAR_BINARY_OP(operator+,sum)
  </code></pre>