¿Cómo especializar Iterator por su tipo de valor, en C ++?

¿Es posible especializar un parámetro de plantilla Iterator por suvalue_type?

Tengo una función con el siguiente prototipo.

template<typename InputIterator>
void f(InputIterator first, InputIterator last);

Y quiero manejar especialmente siInputIterator::value_type esSomeSpecificType.