Я думаю, что вы хотите предоставить итераторы для вашего класса графа, а итераторы графа - не что иное, как итераторы базового типа контейнера.Если это так, то вы действительно должны это делать,
template <class T, class Container = std::set<T> >
class graph
{
public:
typedef typename Container::iterator iterator;
typedef typename Container::const_iterator const_iterator;
//...
};
Что касается вашего кода, я бы сказал, что std::set<T>::iterator()
создает временный объект, а временный уничтожается в конце полного выражения.На этом история заканчивается.И std::set<T>::~iterator()
даже не скомпилируется.