45 lines
848 B
Rust
45 lines
848 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() {}
|