// Copyright 2015 The Rust Project Developers. See the COPYRIGHT // file at the top-level directory of this distribution and at // http://rust-lang.org/COPYRIGHT. // // Licensed under the Apache License, Version 2.0 or the MIT license // , at your // option. This file may not be copied, modified, or distributed // except according to those terms. // Example taken from RFC 1238 text // https://github.com/rust-lang/rfcs/blob/master/text/1238-nonparametric-dropck.md // #example-of-the-unguarded-escape-hatch #![feature(dropck_parametricity)] use std::cell::Cell; struct Concrete<'a>(u32, Cell>>); struct Foo { data: Vec } impl Drop for Foo { // Below is the UGEH attribute #[unsafe_destructor_blind_to_params] fn drop(&mut self) { } } fn main() { let mut foo = Foo { data: Vec::new() }; foo.data.push(Concrete(0, Cell::new(None))); foo.data.push(Concrete(0, Cell::new(None))); foo.data[0].1.set(Some(&foo.data[1])); foo.data[1].1.set(Some(&foo.data[0])); }