Why isn't this 'for' loop valid?
<p>From C++ Primer 5th Edition by Lippman, page 182, consider:</p>

<pre><code>int ia[3][4];
for (auto row : ia)
        for (auto col : row)
</code></pre>

<blockquote>
  <p>The first <code>for</code> iterates through ia, whose elements are arrays of size 4.
  <strong>Because <code>row</code> is not a reference, when the compiler initializes <code>row</code> it will convert each array element (like any other object of array
  type) to a pointer to that array’s first element.</strong> As a result, in this
  loop the type of <code>row</code> is <code>int*</code>.</p>
</blockquote>

<p>I am not really sure that I understand how this auto works, but if I can assume it automatically gives a type to a row based on <code>ia</code> array members type, but I don't understand why this kind of <code>for</code>, where row is not a reference, is not valid. Why is this going to happen? <em>"pointer to that array’s first element"</em>, because of what?</p>