Sto rintracciando un errore nel codice di terze parti e l'ho ridotto a qualcosa lungo le righe di.
use libc::c_void;
pub unsafe fn foo() {}
fn main() {
let ptr = &foo as *const _ as *const c_void;
println!("{:x}", ptr as usize);
}
Funzionato su stabile 1.38.0 questo stampa il puntatore a funzione, ma beta (1.39.0-beta.6) e ritorno notturno '1'. ( Parco giochi )
Da cosa viene _
inferito e perché il comportamento è cambiato?
Presumo che il modo corretto di lanciare questo sarebbe semplicemente foo as *const c_void
, ma questo non è il mio codice.
let ptr = foo as *const fn() as *const c_void;
foo
è già un puntatore a funzione, quindi non dovresti prenderne un indirizzo. Ciò crea un doppio riferimento, apparentemente a un tipo di dimensione zero (quindi il valore magico1
).