| // Capture a coherence pattern from wasm-bindgen that we discovered as part of | 
 | // future-compatibility warning #56105. This pattern currently receives a lint | 
 | // warning but we probably want to support it long term. | 
 | // | 
 | // Key distinction: we are implementing once for `A` (take ownership) and one | 
 | // for `&A` (borrow). | 
 | // | 
 | // c.f. #56105 | 
 |  | 
 | #![deny(coherence_leak_check)] | 
 |  | 
 | trait IntoWasmAbi { | 
 |     fn some_method(&self) {} | 
 | } | 
 |  | 
 | trait FromWasmAbi {} | 
 | trait RefFromWasmAbi {} | 
 | trait ReturnWasmAbi {} | 
 |  | 
 | impl<'a, 'b, A, R> IntoWasmAbi for &'a (dyn Fn(A) -> R + 'b) | 
 | where | 
 |     A: FromWasmAbi, | 
 |     R: ReturnWasmAbi, | 
 | { | 
 | } | 
 |  | 
 | // Explicitly writing the bound lifetime. | 
 | impl<'a, 'b, A, R> IntoWasmAbi for &'a (dyn for<'x> Fn(&'x A) -> R + 'b) | 
 | where | 
 |     A: RefFromWasmAbi, | 
 |     R: ReturnWasmAbi, | 
 | { | 
 |     //~^^^^^ ERROR conflicting implementation | 
 |     //~| WARN the behavior may change in a future release | 
 | } | 
 |  | 
 | fn main() {} |