29 lines
456 B
Rust
29 lines
456 B
Rust
|
// run-pass
|
||
|
struct Node<C: CollectionFactory<Self>> {
|
||
|
_children: C::Collection,
|
||
|
}
|
||
|
|
||
|
trait CollectionFactory<T> {
|
||
|
type Collection;
|
||
|
}
|
||
|
|
||
|
impl<T> CollectionFactory<T> for Vec<()> {
|
||
|
type Collection = Vec<T>;
|
||
|
}
|
||
|
|
||
|
trait Collection<T>: Sized {
|
||
|
fn push(&mut self, v: T);
|
||
|
}
|
||
|
|
||
|
impl<T> Collection<T> for Vec<T> {
|
||
|
fn push(&mut self, v: T) {
|
||
|
self.push(v)
|
||
|
}
|
||
|
}
|
||
|
|
||
|
fn main() {
|
||
|
let _ = Node::<Vec<()>> {
|
||
|
_children: Vec::new(),
|
||
|
};
|
||
|
}
|