mirror of
https://github.com/rust-lang/rust.git
synced 2024-11-27 17:24:06 +00:00
36 lines
479 B
Rust
36 lines
479 B
Rust
|
// check-pass
|
||
|
|
||
|
trait Mirror {
|
||
|
type Other;
|
||
|
}
|
||
|
|
||
|
#[derive(Debug)]
|
||
|
struct Even(usize);
|
||
|
struct Odd;
|
||
|
|
||
|
impl Mirror for Even {
|
||
|
type Other = Odd;
|
||
|
}
|
||
|
|
||
|
impl Mirror for Odd {
|
||
|
type Other = Even;
|
||
|
}
|
||
|
|
||
|
trait Dyn<T: Mirror>: AsRef<<T as Mirror>::Other> {}
|
||
|
|
||
|
impl Dyn<Odd> for Even {}
|
||
|
|
||
|
impl AsRef<Even> for Even {
|
||
|
fn as_ref(&self) -> &Even {
|
||
|
self
|
||
|
}
|
||
|
}
|
||
|
|
||
|
fn code<T: Mirror>(d: &dyn Dyn<T>) -> &T::Other {
|
||
|
d.as_ref()
|
||
|
}
|
||
|
|
||
|
fn main() {
|
||
|
println!("{:?}", code(&Even(22)));
|
||
|
}
|