chamada de função com semântica diferente

Considerando este código com 3 diferentes semânticas de chamadas de função:

void f(void){
   puts("OK");
}

int main(void){
   f();
  (*f)();
  (&f)();

  return 0;
}

A primeira é a maneira padrão de chamar f,

a segunda é a semântica para ponteiros de função de referência,

mas no terceiro estou aplicando o operador & ao nome da função e parece funcionar bem.

O que acontece no segundo e terceiro casos?

Obrigado.

questionAnswers(2)

yourAnswerToTheQuestion