On the line

set<T>::iterator iter;

I am getting "expected ';' before 'iter'"

#include <vector>
#include <set>
using namespace std;
	template <typename T>
	vector<T> UniqueElements(const vector<T> &V)
		set<T> s;
		s.insert(V.begin(), V.end());
		vector<T> Elements;
		set<T>::iterator iter;

		return Elements;

Can anyone see why?

It compiles fine if I do

set<int>::iterator iter;


Ah I remember now, someone had shown me this once before:

typename set<T>::iterator it;

But we never understood why you had to do this? Can anyone explain?