title: reference used for template parameter
body: <p>I got following code running</p>
  
  <pre><code>using namespace std;
  #include &lt;iostream&gt;
  
  template&lt;typename a&gt; struct function 
  { 
      void self1(){ cout &lt;&lt; "hello world 1111" &lt;&lt; endl; }
  };
  
  template&lt;typename a&gt; struct function&lt;a&amp;&gt; 
  { 
      void self2() { cout &lt;&lt; "hello world 2222" &lt;&lt; endl; }
  };
  
  
  int main()
  {
      function&lt;int&gt; a;
      a.self1();
      function&lt;int&amp;&gt; b;
      b.self2();
      return 0;
  }
  </code></pre>
  
  <p>The result is:</p>
  
  <pre><code>hellow world 1111
  heloow world 2222
  </code></pre>
  
  <p>Would like to ask the relation ship between the first "struct function" and the second "struct function"</p>
  
  <p>Is the second one classfied as "template specialization" for the first one? (seems not)</p>
  
  <p>I can see that the 2nd one is based on the 1st one. (By removing the 1st one, it is not compilable). But </p>
  
  <pre><code>b.self1() is not defined.
  </code></pre>
  
  <p>So somehow the 2nd have redefined the struct to a new one?</p>