1 // revisions: stock precise
2 #![feature(const_trait_impl)]
3 #![feature(const_mut_refs)]
4 #![cfg_attr(precise, feature(const_precise_live_drops))]
6 use std::marker::{Destruct, PhantomData};
10 impl Drop for NonTrivialDrop {
12 println!("Non trivial drop");
16 struct ConstImplWithDropGlue(NonTrivialDrop);
18 impl const Drop for ConstImplWithDropGlue {
22 trait A { fn a() { println!("A"); } }
24 impl A for NonTrivialDrop {}
26 struct ConstDropImplWithBounds<T: A>(PhantomData<T>);
28 impl<T: ~const A> const Drop for ConstDropImplWithBounds<T> {
34 const fn check<T: ~const Destruct>(_: T) {}
36 macro_rules! check_all {
37 ($($exp:expr),*$(,)?) => {$(
38 const _: () = check($exp);
45 ConstImplWithDropGlue(NonTrivialDrop),
47 ConstDropImplWithBounds::<NonTrivialDrop>(PhantomData),
48 //~^ ERROR the trait bound