In void* a, aviene dichiarato come un puntatore non a un voidtipo ma a un tipo "qualsiasi" (caso speciale). Un indirizzo (posizione in memoria) viene assegnato a, come a qualsiasi altra variabile dichiarata, ovviamente.
Dopodiché, l'espressione &aviene valutata per inizializzare la variabile (anche a, ma questo non è rilevante) appena dichiarata. Il tipo di &aè "puntatore a puntatore a qualsiasi tipo", che è un caso speciale di "puntatore a qualsiasi tipo", pienamente compatibile con il tipo di a. Ergo, nessun messaggio del compilatore.
Corollario: non utilizzare void*se si desidera un controllo del tipo forte. Tutto può essere convertito in esso. Esattamente l'opposto nella direzione opposta, tranne che per void*se stesso (sarebbe un'eccezione non necessaria che un tipo fosse incompatibile con se stesso).
Inoltre, AFAIR questo viene davvero da C.