| //@ check-pass | |
| pub trait Trait1 { | |
| type C; | |
| } | |
| struct T1; | |
| impl Trait1 for T1 { | |
| type C = usize; | |
| } | |
| pub trait Callback<T: Trait1>: FnMut(<T as Trait1>::C) {} | |
| impl<T: Trait1, F: FnMut(<T as Trait1>::C)> Callback<T> for F {} | |
| pub struct State<T: Trait1> { | |
| callback: Option<Box<dyn Callback<T>>>, | |
| } | |
| impl<T: Trait1> State<T> { | |
| fn new() -> Self { | |
| Self { callback: None } | |
| } | |
| fn test_cb(&mut self, d: <T as Trait1>::C) { | |
| (self.callback.as_mut().unwrap())(d) | |
| } | |
| } | |
| fn main() { | |
| let mut s = State::<T1>::new(); | |
| s.test_cb(1); | |
| } |