|  | // Regression test for <https://github.com/rust-lang/rust/issues/144165>. | 
|  |  | 
|  | // We were previously suppressing the copy error in the `Clone` impl because we assumed | 
|  | // that the only way we get `Copy` ambiguity errors was due to incoherent impls. This is | 
|  | // not true, since ambiguities can be encountered due to overflows (among other ways). | 
|  |  | 
|  | struct S<T: 'static>(Option<&'static T>); | 
|  |  | 
|  | impl<T: 'static> Copy for S<T> where S<T>: Copy + Clone {} | 
|  | impl<T: 'static> Clone for S<T> { | 
|  | fn clone(&self) -> Self { | 
|  | *self | 
|  | //~^ ERROR cannot move out of `*self` which is behind a shared reference | 
|  | } | 
|  | } | 
|  | fn main() {} |