29 lines
741 B
Rust
29 lines
741 B
Rust
#![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<'_, ()>`
|
|
}
|