45 lines
851 B
Rust
45 lines
851 B
Rust
//@ revisions: good1 good2 bad1 bad2
|
|
//@[good1] check-pass
|
|
//@[good2] check-pass
|
|
|
|
use std::ops::Drop;
|
|
|
|
struct DropMe<T: Copy>(T);
|
|
|
|
#[cfg(good1)]
|
|
impl<T> Drop for DropMe<T>
|
|
where
|
|
T: Copy + Clone,
|
|
{
|
|
fn drop(&mut self) {}
|
|
}
|
|
|
|
#[cfg(good2)]
|
|
impl<T> Drop for DropMe<T>
|
|
where
|
|
T: Copy,
|
|
[T; 1]: Copy, // Trivial bound implied by `T: Copy`
|
|
{
|
|
fn drop(&mut self) {}
|
|
}
|
|
|
|
#[cfg(bad1)]
|
|
impl<T> Drop for DropMe<T>
|
|
//[bad1]~^ ERROR the trait bound `T: Copy` is not satisfied
|
|
where
|
|
[T; 1]: Copy, // But `[T; 1]: Copy` does not imply `T: Copy`
|
|
{
|
|
fn drop(&mut self) {}
|
|
//[bad1]~^ ERROR the trait bound `T: Copy` is not satisfied
|
|
}
|
|
|
|
#[cfg(bad2)]
|
|
impl<T> Drop for DropMe<T>
|
|
//[bad2]~^ ERROR the trait bound `T: Copy` is not satisfied
|
|
{
|
|
fn drop(&mut self) {}
|
|
//[bad2]~^ ERROR the trait bound `T: Copy` is not satisfied
|
|
}
|
|
|
|
fn main() {}
|