Open
Description
#![feature(transmutability)]
use std::mem::{Assume, MaybeUninit, TransmuteFrom};
pub fn is_transmutable<Src, Dst>() where Dst: TransmuteFrom<Src, { Assume::SAFETY }>{}
#[derive(Copy, Clone)]
#[repr(u8)]
enum B0 { Value = 0 }
#[derive(Copy, Clone)]
#[repr(u8)]
enum B1 { Value = 1 }
fn main() {
is_transmutable::<(B0, B0), MaybeUninit<(B0, B0)>>(); // ok
is_transmutable::<(B0, B0), MaybeUninit<(B0, B1)>>(); // unexpected error: `(B0, B0)` cannot be safely transmuted into `MaybeUninit<(B0, B1)>`
is_transmutable::<(B0, B0), MaybeUninit<(B1, B0)>>(); // ok
is_transmutable::<(B0, B0), MaybeUninit<(B1, B1)>>(); // ok
}
cc @jswrenn