Why does this `auto` not automatically turn into "`const`"
<blockquote>
  <p><strong>Possible Duplicate:</strong><br>
  <a href="http://stackoverflow.com/questions/14008893/auto-reference-in-c11">auto reference in c++11</a>  </p>
</blockquote>



<p>The more I learn C++, the more I have come to realize that so far (almost; see below) everything in it basically just makes sense. I find that I don't really have to learn any rules by heart because everything behaves as expected. So the main thing becomes to actually understand the concepts, and then the rest takes care of itself.</p>

<p>For instance:</p>

<pre><code>const int ci = 0;
auto &amp;a = ci;       //automatically made const (const int &amp;)
</code></pre>

<p>This works and makes sense. Anything else for the type of <code>a</code> would just be absurd.</p>

<p>But take these now:</p>

<pre><code>auto &amp;b = 42;       //error -- does not automatically become const (const int)
const auto &amp;c = 42; //fine, but we have to manually type const
</code></pre>

<p>Why is the first an error? Why doesn't the compiler automatically detect this? Why does the <code>const</code> have to be typed out manually? I want to really understand why, on a fundamental level so that things make sense, without having to learn any rigid rules by heart (see above).</p>
