1 // ignore-tidy-linelength
2 
3 // Check that we normalize super predicates for object candidates.
4 
5 // check-pass
6 
7 use std::ops::Index;
8 
next<'a, T>(s: &'a mut dyn SVec<Item = T, Output = T>)9 fn next<'a, T>(s: &'a mut dyn SVec<Item = T, Output = T>) {
10     // To prove
11     // `dyn SVec<Item = T, Output = T>: SVec`
12     // we need to show
13     // `dyn SVec<Item = T, Output = T> as Index>::Output == <dyn SVec<Item = T, Output = T> as SVec>::Item`
14     // which, with the current normalization strategy, has to be eagerly
15     // normalized to:
16     // `dyn SVec<Item = T, Output = T> as Index>::Output == T`.
17     let _ = s.len();
18 }
19 
20 trait SVec: Index<usize, Output = <Self as SVec>::Item> {
21     type Item;
22 
len(&self) -> usize23     fn len(&self) -> usize;
24 }
25 
main()26 fn main() {}
27