| #![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<NonNull<[u8]>, AllocError> { | |
| System.allocate(layout) | |
| } | |
| unsafe fn deallocate(&self, ptr: NonNull<u8>, 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) | |
| } |