hat contains the partial specialisation parameters; these
define the types that will bind to that partial specialisation
rather than the default template. The rules for what can appear
in a partial specialisation are somewhat convoluted, but as a
rule of thumb if you can legally write two function overloads of
the form:</p>

<pre>void foo(T);
void foo(U);</pre>

<p>Then you can also write a partial specialisation of the form:</p>

<pre>template &lt;typename T&gt;
class c{ /*details*/ };

template &lt;typena