23 lines
559 B
Rust
23 lines
559 B
Rust
//@ run-pass
|
|
#![allow(unused_variables)]
|
|
pub trait Parameters { type SelfRef; }
|
|
|
|
struct RP<'a> { _marker: std::marker::PhantomData<&'a ()> }
|
|
struct BP;
|
|
|
|
impl<'a> Parameters for RP<'a> { type SelfRef = &'a X<RP<'a>>; }
|
|
impl Parameters for BP { type SelfRef = Box<X<BP>>; }
|
|
|
|
pub struct Y;
|
|
pub enum X<P: Parameters> {
|
|
Nothing,
|
|
SameAgain(P::SelfRef, Y)
|
|
}
|
|
|
|
fn main() {
|
|
let bnil: Box<X<BP>> = Box::new(X::Nothing);
|
|
let bx: Box<X<BP>> = Box::new(X::SameAgain(bnil, Y));
|
|
let rnil: X<RP> = X::Nothing;
|
|
let rx: X<RP> = X::SameAgain(&rnil, Y);
|
|
}
|