Why is this an issue?

Transmuting between collections of different types can lead to undefined behavior due to differences in ABI, size, or alignment. This can result in serious issues like out-of-bounds memory access.

Code examples

Noncompliant code example

let vec = vec![2_u16];
unsafe {
    std::mem::transmute::<_, Vec<u32>>(vec); // Noncompliant: Different size, likely out-of-bounds memory access.
}

Compliant solution

let vec = vec![2_u16];
let vec_u32: Vec<u32> = vec.into_iter().map(u32::from).collect(); // Compliant: Iterates, maps, and collects the values safely.

Resources

Documentation