Template specialization vs. Function overloading : <p>The question is pretty simple. Is there any difference between:</p>

<pre><code>template &lt;typename T&gt;
T add(T a, T b)
{
    return a + b;
}

template &lt;&gt;
int add&lt;int&gt;(int a, int b)
{
    return a + b; //no reason to specialize, but still...
}
</code></pre>

<p>And:</p>

<pre><code>template &lt;typename T&gt;
T add(T a, T b)
{
    return a + b;
}

int add(int a, int b)
{
    return a + b; //no reason to overload, but still...
}
</code></pre>

<p>They seem to be the same.</p>
