#![allow(dead_code, deprecated, unused_variables, unused_mut)] use std::{slice, mem}; fn split_at_mut_transmute(slice: &mut [T], mid: usize) -> (&mut [T], &mut [T]) { let len = slice.len(); assert!(mid <= len); unsafe { let slice2 = mem::transmute::<&mut [T], &mut [T]>(slice); (&mut slice[0..mid], &mut slice2[mid..len]) } } fn split_at_mut_casts(slice: &mut [T], mid: usize) -> (&mut [T], &mut [T]) { let len = slice.len(); assert!(mid <= len); unsafe { let slice2 = &mut *(slice as *mut [T]); (&mut slice[0..mid], &mut slice2[mid..len]) } } fn split_at_stdlib(slice: &mut [T], mid: usize) -> (&mut [T], &mut [T]) { let len = slice.len(); assert!(mid <= len); unsafe { let ptr = slice.as_mut_ptr(); ( slice::from_raw_parts_mut(ptr, mid), slice::from_raw_parts_mut(ptr.add(mid), len - mid), ) } } fn main() {}