| #![feature(const_trait_impl)] |
| #![feature(const_mut_refs)] |
| #![cfg_attr(precise, feature(const_precise_live_drops))] |
| use std::marker::{Destruct, PhantomData}; |
| impl Drop for NonTrivialDrop { |
| println!("Non trivial drop"); |
| impl A for NonTrivialDrop {} |
| struct ConstDropImplWithBounds<T: ~const A>(PhantomData<T>); |
| impl<T: ~const A> const Drop for ConstDropImplWithBounds<T> { |
| const fn check<T: ~const Destruct>(_: T) {} |
| const _: () = check::<ConstDropImplWithBounds<NonTrivialDrop>>( |
| ConstDropImplWithBounds(PhantomData) |
| struct ConstDropImplWithNonConstBounds<T: A>(PhantomData<T>); |
| impl<T: ~const A> const Drop for ConstDropImplWithNonConstBounds<T> { |