| //@ check-pass |
| #![feature(specialization)] |
| //~^ WARN the feature `specialization` is incomplete |
| |
| fn main() {} |
| |
| pub trait Alpha<T> { } |
| |
| pub trait Beta { |
| type Event; |
| } |
| |
| pub trait Delta { |
| type Handle; |
| fn process(&self); |
| } |
| |
| pub struct Parent<A, T>(A, T); |
| |
| impl<A, T> Delta for Parent<A, T> |
| where A: Alpha<T::Handle>, |
| T: Delta, |
| T::Handle: Beta<Event = <Handle as Beta>::Event> { |
| type Handle = Handle; |
| default fn process(&self) { |
| unimplemented!() |
| } |
| } |
| |
| impl<A, T> Delta for Parent<A, T> |
| where A: Alpha<T::Handle> + Alpha<Handle>, |
| T: Delta, |
| T::Handle: Beta<Event = <Handle as Beta>::Event> { |
| fn process(&self) { |
| unimplemented!() |
| } |
| } |
| |
| pub struct Handle; |
| |
| impl Beta for Handle { |
| type Event = (); |
| } |