blob: f4630fe1f7d83178dc723fd70f7b6946a71fda47 [file]
#![feature(reborrow)]
#![allow(dead_code)]
use std::marker::{CoerceShared, Reborrow};
struct ReorderMut<'a> {
a: &'a mut u8,
b: &'a mut u16,
}
impl<'a> Reborrow for ReorderMut<'a> {}
#[derive(Clone, Copy)]
struct ReorderRef<'a> {
b: &'a u16,
a: &'a u8,
}
impl<'a> CoerceShared<ReorderRef<'a>> for ReorderMut<'a> {}
//~^ ERROR
fn read(value: ReorderRef<'_>) -> (u16, u8) {
(*value.b, *value.a)
}
fn main() {
let mut a = 1;
let mut b = 2;
let wrapped = ReorderMut { a: &mut a, b: &mut b };
assert_eq!(read(wrapped), (2, 1));
}