2540070fd4
Documents that `BikeshedIntrinsicFrom` models transmute-via-union, which is slightly more expressive than the transmute-via-cast implemented by `transmute_copy`. Additionally, we provide an implementation of transmute-via-union as a method on the `BikeshedIntrinsicFrom` trait with additional documentation on the boundary between trait invariants and caller obligations. Whether or not transmute-via-union is the right kind of transmute to model remains up for discussion [1]. Regardless, it seems wise to document the present behavior. [1] https://rust-lang.zulipchat.com/#narrow/stream/216762-project-safe-transmute/topic/What.20'kind'.20of.20transmute.20to.20model.3F/near/426331967
17 lines
948 B
Plaintext
17 lines
948 B
Plaintext
error[E0277]: expected a `FnOnce(&str)` closure, found `unsafe extern "rust-intrinsic" fn(_) -> _ {std::intrinsics::transmute::<_, _>}`
|
|
--> $DIR/coerce-unsafe-to-closure.rs:2:44
|
|
|
|
|
LL | let x: Option<&[u8]> = Some("foo").map(std::mem::transmute);
|
|
| --- ^^^^^^^^^^^^^^^^^^^ call the function in a closure: `|| unsafe { /* code */ }`
|
|
| |
|
|
| required by a bound introduced by this call
|
|
|
|
|
= help: the trait `FnOnce(&str)` is not implemented for fn item `unsafe extern "rust-intrinsic" fn(_) -> _ {std::intrinsics::transmute::<_, _>}`
|
|
= note: unsafe function cannot be called generically without an unsafe block
|
|
note: required by a bound in `Option::<T>::map`
|
|
--> $SRC_DIR/core/src/option.rs:LL:COL
|
|
|
|
error: aborting due to 1 previous error
|
|
|
|
For more information about this error, try `rustc --explain E0277`.
|