mirror of
https://github.com/rust-lang/rust
synced 2024-11-05 20:45:15 +00:00
35 lines
479 B
Rust
35 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)));
|
|
}
|