File tree 2 files changed +51
-0
lines changed
src/test/ui/existential_types
2 files changed +51
-0
lines changed Original file line number Diff line number Diff line change
1
+ #![ feature( existential_type) ]
2
+
3
+ trait IterBits {
4
+ type BitsIter : Iterator < Item = u8 > ;
5
+ fn iter_bits ( self , n : u8 ) -> Self :: BitsIter ;
6
+ }
7
+
8
+ existential type IterBitsIter < T , E , I > : std:: iter:: Iterator < Item = I > ;
9
+ //~^ ERROR could not find defining uses
10
+
11
+ impl < T , E > IterBits for T
12
+ where
13
+ T : std:: ops:: Shr < Output = T >
14
+ + std:: ops:: BitAnd < T , Output = T >
15
+ + std:: convert:: From < u8 >
16
+ + std:: convert:: TryInto < u8 , Error = E > ,
17
+ E : std:: fmt:: Debug ,
18
+ {
19
+ type BitsIter = IterBitsIter < T , E , u8 > ;
20
+ fn iter_bits ( self , n : u8 ) -> Self :: BitsIter {
21
+ //~^ ERROR type parameter `E` is part of concrete type but not used
22
+ ( 0u8 ..n)
23
+ . rev ( )
24
+ . map ( move |shift| ( ( self >> T :: from ( shift) ) & T :: from ( 1 ) ) . try_into ( ) . unwrap ( ) )
25
+ }
26
+ }
Original file line number Diff line number Diff line change
1
+ error[E0601]: `main` function not found in crate `issue_60564`
2
+ |
3
+ = note: consider adding a `main` function to `$DIR/issue-60564.rs`
4
+
5
+ error: type parameter `E` is part of concrete type but not used in parameter list for existential type
6
+ --> $DIR/issue-60564.rs:20:49
7
+ |
8
+ LL | fn iter_bits(self, n: u8) -> Self::BitsIter {
9
+ | _________________________________________________^
10
+ LL | |
11
+ LL | | (0u8..n)
12
+ LL | | .rev()
13
+ LL | | .map(move |shift| ((self >> T::from(shift)) & T::from(1)).try_into().unwrap())
14
+ LL | | }
15
+ | |_____^
16
+
17
+ error: could not find defining uses
18
+ --> $DIR/issue-60564.rs:8:1
19
+ |
20
+ LL | existential type IterBitsIter<T, E, I>: std::iter::Iterator<Item = I>;
21
+ | ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
22
+
23
+ error: aborting due to 3 previous errors
24
+
25
+ For more information about this error, try `rustc --explain E0601`.
You can’t perform that action at this time.
0 commit comments