title: universal reference ignores top level cv qualifier
body: <p>Can anyone tell me why univeral references loose the top-level cv qualifies? I expected the output would return true for const on the second and third function calls in the following code.</p>
  
  <pre><code>#include &lt;iostream&gt;
  #include &lt;type_traits&gt;
  
  using namespace std;
  
  template&lt;class T&gt;
  void print(T const &amp;value){
      cout &lt;&lt; "Printing from const &amp; method: " &lt;&lt; value &lt;&lt; endl;
  }
  
  template&lt;class T&gt;
  void print(T const *value){
      cout &lt;&lt; "Printing from const * method: " &lt;&lt; *value &lt;&lt; endl;
  }
  
  template&lt;class T&gt;
  void f(T&amp;&amp; item){
      cout &lt;&lt; "T is const: " &lt;&lt; boolalpha &lt;&lt; is_const&lt;decltype(item)&gt;::value &lt;&lt; endl;
  
      print(std::forward&lt;T&gt;(item));
  }
  
  
  int main(){
  
      f(5);
  
      const int a = 5;
      f(a);
  
      const int * const ptr = &amp;a;
  
      f(ptr);
  
      return 0;
  }
  </code></pre>
  
  <p>Output:</p>
  
  <pre><code>T is const: false
  Printing from const &amp; method: 5
  T is const: false
  Printing from const &amp; method: 5
  T is const: false
  Printing from const * method: 5
  </code></pre>