typedef typename std::stack<T>::container_type::iterator iterator;template<typename T> как я понял используется для помощи компилятору в определении типа. std::stack<T>::container_type::iterator ? разве у стека есть итератор?
typename в данном случае нужен компилятору только как подсказка от разработчика, что последующий идентификатор (т.е. std::stack<T>::container_type::iterator) - это действительно имя типа. Подсказка нужна потому, что этот typedef вероятно находится также в шаблоне, и мы ещё не знаем, во что конкретно инстанциируется шаблон std::stack (в этом случае говорят, что container_type "is dependent on a template-parameter" - пока не инстанциируем std::stack, не узнаем).container_type эквивалентен типу нижележащего контейнера (т.к. std::stack - это адаптер под интерфейс стека, а не реальный контейнер, реальный контейнер для хранения вы выбираете вторым параметром шаблона, по-умолчанию это std::deque).std::deque<T> итератор действительно есть.