Why do we need typename here?
<pre><code>template&lt;class T&gt;
class Set 
{
public:
   void insert(const T&amp; item);
   void remove(const T&amp; item);
private:
   std::list&lt;T&gt; rep;
}

template&lt;typename T&gt;
void Set&lt;T&gt;::remove(const T&amp; item)
{
   typename std::list&lt;T&gt;::iterator it =  // question here
    std::find(rep.begin(),rep.end(),itme);
   if(it!=rep.end()) rep.erase(it);

}
</code></pre>

<p>Why the typename in the remove() is needed?</p>
