Что означает вывод _
и почему изменилось поведение?
Каждый раз, когда вы выполняете приведение необработанного указателя, вы можете изменить только один фрагмент информации (ссылкаили необработанный указатель; изменчивость; тип). Поэтому, если вы выполните это приведение:
let ptr = &foo as *const _
, поскольку вы изменили ссылку на необработанный указатель, тип, выведенный для _
, должен быть неизменным и поэтомутип foo
, который является неописуемым типом для функции foo
.
Вместо этого вы можете напрямую привести к указателю на функцию, который выражается в синтаксисе Rust:
let ptr = foo as *const fn() as *const c_void;
Что касается того, почему он изменился, сказать сложно. Это может быть ошибка в ночной сборке. Стоит сообщить об этом - даже если это не ошибка, вы, вероятно, получите хорошее объяснение от команды компиляторов о том, что на самом деле происходит!