Overloading and Template Combined
<p>Below code made me confused:</p>

<ol>
<li><p>I was expecting <code>operator+&lt;int&gt;</code> to give compilation time error, as operator overloading mandates at least one non-intrinsic type. If I try <code>int operator+(int i, int j)</code> it fails. But it did not create any problem, why?</p></li>
<li><p>If I call <code>2+3</code> does it not call <code>operator+</code>, I have to do explicitly <code>operator+&lt;int&gt;</code>?</p></li>
<li><p>Is there a better way, other then writing <code>operator+&lt;int&gt;</code> to call my definition of <code>operator+</code>?</p></li>
<li><p>Is there a place which i can refer, which explains it better?</p></li>
</ol>

<p>NOTE: I used "Sun C++ 5.10"</p>

<pre><code>#include &lt;iostream&gt;

using namespace std;

template &lt;typename T&gt;
T operator+(T i, T j)
{
        return i+j;
}

int main()
{
        cout&lt;&lt;2+3;
        cout&lt;&lt;operator+&lt;int&gt;(2,3);
        cout&lt;&lt;endl;
}
</code></pre>

<p>The output is as below,</p>

<pre><code>bash-2.03$ ./a.out

55
</code></pre>
