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);
//...
}