]> git.lizzy.rs Git - rust.git/blob - src/test/ui/generic-associated-types/issue-88287.rs
Rollup merge of #102954 - GuillaumeGomez:cfg-hide-attr-checks, r=Manishearth
[rust.git] / src / test / ui / generic-associated-types / issue-88287.rs
1 // edition:2018
2
3 #![feature(type_alias_impl_trait)]
4
5 use std::future::Future;
6
7 trait SearchableResource<Criteria> {
8     type SearchResult;
9 }
10
11 trait SearchableResourceExt<Criteria>: SearchableResource<Criteria> {
12     type Future<'f, A: 'f + ?Sized, B: 'f>: Future<Output = Result<Vec<A::SearchResult>, ()>> + 'f
13     where
14         A: SearchableResource<B>,
15         Self: 'f;
16
17     fn search<'c>(&'c self, client: &'c ()) -> Self::Future<'c, Self, Criteria>;
18 }
19
20 type SearchFutureTy<'f, A, B: 'f>
21 where
22     A: SearchableResource<B> + ?Sized + 'f,
23 = impl Future<Output = Result<Vec<A::SearchResult>, ()>> + 'f;
24 impl<T, Criteria> SearchableResourceExt<Criteria> for T
25 where
26     T: SearchableResource<Criteria>,
27 {
28     type Future<'f, A, B: 'f> = SearchFutureTy<'f, A, B>
29     where
30         A: SearchableResource<B> + ?Sized + 'f,
31         Self: 'f;
32
33     fn search<'c>(&'c self, _client: &'c ()) -> Self::Future<'c, Self, Criteria> {
34         async move { todo!() }
35         //~^ ERROR: the size for values of type `A` cannot be known at compilation time
36     }
37 }
38
39 fn main() {}