Keep somebody from doing something by accident
<p>I encountered a problem basically can be explain by the code below:</p>

<pre><code>void (*fn_ptr)();

template&lt;typename T&gt; void Second(){
    //do something
}

template&lt;typename T&gt; void First() {
    //do init
    fn_ptr = Second&lt;T&gt;;
}
</code></pre>

<p>The function <code>First</code> and function <code>Second</code> both need to be <code>template function</code> and will only be called through function pointer <code>fn_ptr</code>. Function <code>First</code> must be called once before function <code>Second</code> is called. You don't need manually call function Second. So the only thing we should do before <code>fun_ptr</code> is used somewhere is this:</p>

<pre><code>fn_ptr = First&lt;SomeType&gt;;
</code></pre>

<p><strong>There comes the question</strong>: How can I keep people from doing this:</p>

<pre><code>fn_ptr = Second&lt;SomeType&gt;;
</code></pre>

<p>ps: I know how to do it when function <code>First</code> and function <code>Second</code> are not <code>template function</code></p>
