Hola,
Supongo que la clase KeypointIter sobrecarga el operador de dereferenciación. Tiene que tener esta pinta:
// eso es el operador de dereferenciación, y para que functione con el
// codigo que nos has enseñado, tiene que devolver un Keypoint* :
Keypoint* operator&(Integer& a);
Si quieres enteder bien lo que pasa, fijate el codigo siguiente, y ejecutalo con puntos de parada para ver lo que pasa:
struct Dum
{
Dum( int n = 0 ) : num(n) {}
int num;
};
Dum* operator * ( Dum & dum ) { return &dum; }
int main()
{
Dum dum(10);
Dum* pd = (*dum);
//...
}