title: C++ templates specialization syntax
body: <p>In C++ Primer Plus (2001, Czech Translation) I have found these different template specialization syntax:</p>
  
  <p><strong>function template</strong></p>
  
  <pre><code>template &lt;typename T&gt; void foo(T);
  </code></pre>
  
  <p><strong>specialization syntax</strong></p>
  
  <pre><code>void foo(int param); // 1
  void foo&lt;int&gt;(int param); // 2
  template &lt;&gt; void foo&lt;int&gt;(int param); // 3
  template &lt;&gt; void foo(int param); // 4
  template void foo(int param); // 5
  </code></pre>
  
  <p>Googling a bit, I have found only No.3 examples. Is there any difference (in call, compiling, usage) among them? Are some of them obsolete/deprecated? Why not just use No.1?</p>