+++ /dev/null
-// check-fail
-// edition:2021
-// known-bug: #88908
-
-// This should pass, but seems to run into a TAIT bug.
-
-#![feature(type_alias_impl_trait)]
-
-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() {}
+++ /dev/null
-error[E0271]: type mismatch resolving `<Empty<_> as Stream>::Item == Repr`
- --> $DIR/issue-89008.rs:38:43
- |
-LL | fn line_stream<'a, Repr>(&'a self) -> Self::LineStreamFut<'a, Repr> {
- | ---- ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ type mismatch resolving `<Empty<_> as Stream>::Item == Repr`
- | |
- | this type parameter
- |
-note: expected this to be `()`
- --> $DIR/issue-89008.rs:17:17
- |
-LL | type Item = ();
- | ^^
- = note: expected unit type `()`
- found type parameter `Repr`
-
-error: aborting due to previous error
-
-For more information about this error, try `rustc --explain E0271`.
--- /dev/null
+// check-pass
+// edition:2021
+
+#![feature(type_alias_impl_trait)]
+
+use std::future::Future;
+use std::marker::PhantomData;
+
+trait Stream {
+ type Item;
+}
+
+struct Empty<T> {
+ _phantom: PhantomData<T>,
+}
+
+impl<T> Stream for Empty<T> {
+ type Item = T;
+}
+
+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 { _phantom: PhantomData } }
+ }
+}
+
+fn main() {}