Вам нужно typename std::list<T>::iterator
. Это потому, что list
зависит от параметра шаблона, поэтому компилятор не может знать, каким именно будет имя iterator
внутри него (ну, технически это может быть известно, но стандарт C ++ не работает таким образом). Ключевое слово typename
сообщает компилятору, что ниже следует имя типа.