diff options
Diffstat (limited to 'src/test/ui/generic-associated-types/bugs/issue-89008.rs')
-rw-r--r-- | src/test/ui/generic-associated-types/bugs/issue-89008.rs | 44 |
1 files changed, 44 insertions, 0 deletions
diff --git a/src/test/ui/generic-associated-types/bugs/issue-89008.rs b/src/test/ui/generic-associated-types/bugs/issue-89008.rs new file mode 100644 index 000000000..79c28b0d2 --- /dev/null +++ b/src/test/ui/generic-associated-types/bugs/issue-89008.rs @@ -0,0 +1,44 @@ +// check-fail +// edition:2021 +// known-bug: #88908 + +// This should pass, but seems to run into a TAIT bug. + +#![feature(type_alias_impl_trait)] +#![feature(generic_associated_types)] + +use std::future::Future; + +trait Stream { + type Item; +} + +struct Empty<T>(T); +impl<T> Stream for Empty<T> { + type Item = (); +} +fn empty<T>() -> Empty<T> { + todo!() +} + +trait X { + type LineStream<'a, Repr>: Stream<Item = Repr> where Self: 'a; + + type LineStreamFut<'a,Repr>: Future<Output = Self::LineStream<'a, Repr>> where Self: 'a; + + fn line_stream<'a,Repr>(&'a self) -> Self::LineStreamFut<'a,Repr>; +} + +struct Y; + +impl X for Y { + type LineStream<'a, Repr> = impl Stream<Item = Repr>; + + type LineStreamFut<'a, Repr> = impl Future<Output = Self::LineStream<'a, Repr>> ; + + fn line_stream<'a, Repr>(&'a self) -> Self::LineStreamFut<'a, Repr> { + async {empty()} + } +} + +fn main() {} |