35 lines
571 B
Rust
35 lines
571 B
Rust
|
// build-pass
|
||
|
|
||
|
trait Trait { type Item; }
|
||
|
|
||
|
impl<'a, X> Trait for &'a Vec<X> {
|
||
|
type Item = &'a X;
|
||
|
}
|
||
|
|
||
|
impl<X> Trait for Box<dyn Trait<Item = X>> {
|
||
|
type Item = X;
|
||
|
}
|
||
|
|
||
|
fn make_dyn_trait(_: &()) -> Box<dyn Trait<Item = &()>> {
|
||
|
todo!()
|
||
|
}
|
||
|
|
||
|
fn diff<'a, M, N, S>(_: N, _: S)
|
||
|
where
|
||
|
M: 'a,
|
||
|
N: Trait<Item = &'a M>,
|
||
|
S: Trait<Item = &'a M>,
|
||
|
{
|
||
|
todo!()
|
||
|
}
|
||
|
|
||
|
fn may_panic<X>(_: X) { }
|
||
|
|
||
|
fn main() {
|
||
|
let dyn_trait = make_dyn_trait(&());
|
||
|
let storage = vec![()];
|
||
|
let _x = may_panic(());
|
||
|
let storage_ref = &storage;
|
||
|
diff(dyn_trait, storage_ref);
|
||
|
}
|