| //@ check-pass | |
| trait Base<'f> { | |
| type Assoc; | |
| fn do_something(&self); | |
| } | |
| trait ForAnyLifetime: for<'f> Base<'f> {} | |
| impl<T> ForAnyLifetime for T where T: for<'f> Base<'f> {} | |
| trait CanBeDynamic: ForAnyLifetime + for<'f> Base<'f, Assoc = ()> {} | |
| fn foo(a: &dyn CanBeDynamic) { | |
| a.do_something(); | |
| } | |
| struct S; | |
| impl<'a> Base<'a> for S { | |
| type Assoc = (); | |
| fn do_something(&self) {} | |
| } | |
| impl CanBeDynamic for S {} | |
| fn main() { | |
| let s = S; | |
| foo(&s); | |
| } |