




Вам нужно поместить typename перед этой строкой, поскольку тип, который вы используете :: iterator, зависит от параметра шаблона T. Примерно так:
template< class T >
void example() {
typename std::list< boost::function<T ()> >::iterator it;
}
Рассмотрим линию
std::list< boost::function<T ()> >::iterator * it;
что может означать умножение или указатель. Вот почему вам нужен typename, чтобы прояснить ваше намерение. Без него компилятор предполагает не тип, и поэтому синтаксически требует наличия там оператора или точки с запятой.
Также обратитесь к новой записи часто задаваемых вопросов по C++ Где поместить шаблон и имя типа для зависимых имен.