diff options
| author | lcnr <rust@lcnr.de> | 2021-03-29 17:32:20 +0200 |
|---|---|---|
| committer | Michael Goulet <michael@errs.io> | 2022-11-10 21:18:06 +0000 |
| commit | 0f2e45b18f47c9cb93267a82ed685f5d37f79367 (patch) | |
| tree | a5192fc2867ddc4a7533641cce39a24e8ebba1c5 /src | |
| parent | a3c0a023611fcaf5ae3ec242d7d60e356041d25f (diff) | |
make `Sized` coinductive
Diffstat (limited to 'src')
| -rw-r--r-- | src/test/ui/sized/coinductive-1.rs | 14 | ||||
| -rw-r--r-- | src/test/ui/sized/coinductive-2.rs | 28 |
2 files changed, 42 insertions, 0 deletions
diff --git a/src/test/ui/sized/coinductive-1.rs b/src/test/ui/sized/coinductive-1.rs new file mode 100644 index 00000000000..7bcd0f1fdaf --- /dev/null +++ b/src/test/ui/sized/coinductive-1.rs @@ -0,0 +1,14 @@ +// check-pass +struct Node<C: Trait<Self>>(C::Assoc); + +trait Trait<T> { + type Assoc; +} + +impl<T> Trait<T> for Vec<()> { + type Assoc = Vec<T>; +} + +fn main() { + let _ = Node::<Vec<()>>(Vec::new()); +} diff --git a/src/test/ui/sized/coinductive-2.rs b/src/test/ui/sized/coinductive-2.rs new file mode 100644 index 00000000000..212274d2e4b --- /dev/null +++ b/src/test/ui/sized/coinductive-2.rs @@ -0,0 +1,28 @@ +// 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(), + }; +} |
