Files
rust/tests/ui/reborrow/custom_mut_coerce_shared.rs

Ignoring revisions in .git-blame-ignore-revs. Click here to bypass and see the normal blame view.

29 lines
741 B
Rust
Raw Normal View History

2025-08-30 21:16:56 +03:00
#![feature(reborrow)]
2025-09-27 01:11:01 +03:00
use std::ops::{CoerceShared, Reborrow};
2025-08-30 21:16:56 +03:00
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<'_, ()>`
}