Option::None is not guaranteed to be 0, therefore you cannot simply convert a pointer to an Option and hope it will be that.
fn f(o: Option<bool>) {
unsafe { dbg!(std::mem::transmute::<_, u8>(o)) };
}
fn main() {
f(Some(false)); // 0
f(Some(true)); // 1
f(None); // 2
}
Therefore Option is not FFI safe and should not be used (ultimatly because Rust ABI is not stable (nor really specificied) it is not FFI safe. (Even C++s ABI is not specified. IIRC only C has a stable ABI, and that's why it is the lingua franca).