#![feature(allocator_api)] use std::alloc::{AllocError, Allocator, Layout, System}; use std::ptr::NonNull; use std::boxed::Box; struct Alloc {} unsafe impl Allocator for Alloc { fn allocate(&self, layout: Layout) -> Result, AllocError> { System.allocate(layout) } unsafe fn deallocate(&self, ptr: NonNull, layout: Layout) { System.deallocate(ptr, layout) } } fn use_value(_: u32) {} fn main() { let alloc = Alloc {}; let boxed = Box::new_in(10, alloc.by_ref()); let theref = Box::leak(boxed); drop(alloc); //~^ ERROR cannot move out of `alloc` because it is borrowed use_value(*theref) }