¿Qué tiene de malo pasar el iterador de C ++ por referencia?

He escrito algunas funciones con un prototipo como este:

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

La idea es que la persona que llama proporcionará un rango de caracteres, y la función interpretará los caracteres como un valor entero y lo devolverá, dejando que comience en el pasado el último carácter utilizado. Por ejemplo

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);

Esto dejaríai establecido en 123 yp "apuntando" al espacio antes defoo.

Desde entonces me han dicho (sin explicación) que es una mala forma pasar un iterador por referencia. ¿Es mala forma? Si es así, ¿por qué?

Respuestas a la pregunta(14)

Su respuesta a la pregunta