// 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() {}