Por qué es 'X x; X();' permitido, cuando 'X' define una conversión al puntero de función, pero no, cuando define una conversión a un functor?

void f(int){}
typedef void (*f_ptr)(int);

struct Functor{
  void operator()(int){}
};

struct X{
  operator f_ptr(){ return f; }
};

struct Y{
  operator Functor(){ return Functor(); }
};

int main(){
  X x; Y y;
  x(5); // works ?!
  y(5); // doesn't ?!
}

jemplo de @Live en Ideone. Salida

error: no hay coincidencia para la llamada a '(Y) (int)'

Q1: ¿Por qué la llamada ax(5) permitido, aunqueX solo define una conversión al puntero de función, y nooperator()?

P2: Por el contrario, ¿por qué no se permite lo mismo si definimos una conversión a otro functor?

Respuestas a la pregunta(2)

Su respuesta a la pregunta