| // https://github.com/rust-lang/rust/issues/70746 |
| //@ 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); |
| } |