//@ revisions: good1 good2 bad1 bad2 //@[good1] check-pass //@[good2] check-pass use std::ops::Drop; struct DropMe<'a, T>(&'a T); #[cfg(good1)] impl<'a, T> Drop for DropMe<'a, T> where T: 'a, // Implied by struct, explicit on impl { fn drop(&mut self) {} } #[cfg(good2)] impl<'a, T> Drop for DropMe<'a, T> where 'static: 'a, // Trivial bound { fn drop(&mut self) {} } #[cfg(bad1)] impl<'a, T> Drop for DropMe<'a, T> where T: 'static, //[bad1]~^ ERROR `Drop` impl requires `T: 'static` { fn drop(&mut self) {} } #[cfg(bad2)] impl<'a, T> Drop for DropMe<'a, T> where 'a: 'static, //[bad2]~^ ERROR `Drop` impl requires `'a: 'static` { fn drop(&mut self) {} } fn main() {}