#![feature(reborrow)] use std::ops::{CoerceShared, Reborrow}; struct CustomMut<'a, T>(&'a mut T); impl<'a, T> Reborrow for CustomMut<'a, T> {} impl<'a, T> CoerceShared for CustomMut<'a, T> { type Target = CustomRef<'a, T>; } struct CustomRef<'a, T>(&'a T); impl<'a, T> Clone for CustomRef<'a, T> { fn clone(&self) -> Self { Self(self.0) } } impl<'a, T> Copy for CustomRef<'a, T> {} fn method(a: CustomRef<'_, ()>) {} //~NOTE function defined here fn main() { let a = CustomMut(&mut ()); method(a); //~^ ERROR mismatched types //~| NOTE expected `CustomRef<'_, ()>`, found `CustomMut<'_, ()>` //~| NOTE arguments to this function are incorrect //~| NOTE expected struct `CustomRef<'_, ()>` }