title: "could not convert template argument" error for pointer parameters even with cast
body: <p>Say I have a template class declared as follows:</p>
  
  <pre><code>template&lt; int *x &gt; struct y { int *b; y() { b = x; }}
  </code></pre>
  
  <p>I do need the template parameter to be a constant memory address - it is an embedded code.
  If I try to instantiate it like this: (compiler is gcc 4.8.1 with -std=gnu++11)</p>
  
  <pre><code>y&lt; 1 &gt; c;   
  </code></pre>
  
  <p>I will get an error "could not convert template argument '1' to 'int*'" and that's fine and according to standard. I understand it. </p>
  
  <p>My problem is that casting to pointers does not work either:</p>
  
  <pre><code>y&lt; (int *)1 &gt; d;
  y&lt; reinterpret_cast&lt;int *&gt;(1) &gt; e;
  </code></pre>
  
  <blockquote>
    <p>error: could not convert template argument '1u' to 'int*' </p>
  </blockquote>
  
  <p>in both cases. Why is that? Template argument is already converted, isn't it?</p>