2023-04-12 08:32:15 -05:00
|
|
|
#![feature(impl_trait_in_assoc_type)]
|
2022-02-17 07:55:58 -06:00
|
|
|
|
|
|
|
// edition:2021
|
|
|
|
|
|
|
|
use std::future::Future;
|
|
|
|
|
|
|
|
trait Foo {
|
|
|
|
type T;
|
2023-04-12 08:32:15 -05:00
|
|
|
type Fut2: Future<Output = Self::T>; // ICE got triggered with traits other than Future here
|
|
|
|
type Fut: Future<Output = Self::Fut2>;
|
2022-02-17 07:55:58 -06:00
|
|
|
fn get_fut(&self) -> Self::Fut;
|
|
|
|
}
|
|
|
|
|
|
|
|
struct Implementor;
|
|
|
|
|
|
|
|
impl Foo for Implementor {
|
|
|
|
type T = u64;
|
2023-04-12 08:32:15 -05:00
|
|
|
type Fut2 = impl Future<Output = u64>;
|
|
|
|
type Fut = impl Future<Output = Self::Fut2>;
|
2022-02-17 07:55:58 -06:00
|
|
|
|
|
|
|
fn get_fut(&self) -> Self::Fut {
|
2023-04-12 08:32:15 -05:00
|
|
|
//~^ ERROR `{integer}` is not a future
|
2022-02-17 07:55:58 -06:00
|
|
|
async move {
|
2022-05-27 14:31:10 -05:00
|
|
|
42
|
2022-02-17 07:55:58 -06:00
|
|
|
// 42 does not impl Future and rustc does actually point out the error,
|
|
|
|
// but rustc used to panic.
|
|
|
|
// Putting a valid Future here always worked fine.
|
|
|
|
}
|
|
|
|
}
|
|
|
|
}
|
|
|
|
|
|
|
|
fn main() {}
|