From 5b6d0e8579383444e218e03229cef005fc73d072 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Bart=C5=82omiej=20Kami=C5=84ski?= Date: Tue, 2 Mar 2021 13:56:45 +0100 Subject: [PATCH] Backport the reimplementation of transmute --- src/lib.rs | 11 ++++++++++- 1 file changed, 10 insertions(+), 1 deletion(-) diff --git a/src/lib.rs b/src/lib.rs index ce478e5ec6..cc6ff83fa0 100644 --- a/src/lib.rs +++ b/src/lib.rs @@ -53,7 +53,6 @@ use core::{mem, ptr, slice}; use core::marker::PhantomData; use core::mem::ManuallyDrop; -pub use core::mem::transmute; use core::ops::{Deref, DerefMut}; use typenum::bit::{B0, B1}; @@ -435,6 +434,16 @@ where } } +/// A reimplementation of the `transmute` function, avoiding problems +/// when the compiler can't prove equal sizes. +#[inline] +#[doc(hidden)] +pub unsafe fn transmute(a: A) -> B { + let b = ::core::ptr::read(&a as *const A as *const B); + ::core::mem::forget(a); + b +} + #[cfg(test)] mod test { // Compile with: