O que há de errado em passar o iterador C ++ por referência?

Eu escrevi algumas funções com um protótipo como este:

template <typename input_iterator>
int parse_integer(input_iterator &begin, input_iterator end);

A idéia é que o chamador forneça um intervalo de caracteres e a função interprete os caracteres como um valor inteiro e retorne-o, deixando começar em um passado o último caractere usado. Por exemplo

std::string sample_text("123 foo bar");
std::string::const_iterator p(sample_text.begin());
std::string::const_iterator end(sample_text.end());
int i = parse_integer(p, end);

Isso deixariai definido para 123 ep "apontando" para o espaço antes defoo.

Já me disseram (sem explicação) que é uma má forma passar um iterador por referência. É má forma? Se sim, por quê?

questionAnswers(7)

yourAnswerToTheQuestion