title: auto type deduction when ParamType is neither a Pointer nor a Reference
body: <p>I referred to Scott Meyers "More Effective C++" for auto type deduction. It is mentioned that is works the same way as Template type deduction, and there are 3 cases mentioned. My question falls into case 3 (when ParamType is not a pointer or reference), but the outcome is not matching what is described.</p>
  
  <pre><code>#include &lt;iostream&gt;
  
  int main (void)
  {
     auto i = 2;
     const auto c = &amp;i;
  
     *c = 4;
  
     std::cout &lt;&lt; "i is " &lt;&lt; i;
  }
  </code></pre>
  
  <p>It should work as</p>
  
  <pre><code>template&lt;typename T&gt;
  void f(const T param);
  
  f(&amp;i);   // int *
  </code></pre>
  
  <p>So, <code>T</code> here should match to <code>int *</code> and the complete type of <code>param</code> should be <code>const int *</code>. </p>
  
  <p>But, as the program above shows, <code>c</code> is not <code>const int *</code> but is <code>int *</code>.</p>
  
  <p>Can someone explain what am I missing here?</p>