]>
git.proxmox.com Git - rustc.git/blob - src/test/ui/generic-associated-types/iterable.rs
1 #![feature(generic_associated_types)]
6 type Item
<'a
> where Self: 'a
;
7 type Iter
<'a
>: Iterator
<Item
= Self::Item
<'a
>> where Self: 'a
;
9 fn iter
<'a
>(&'a
self) -> Self::Iter
<'a
>;
12 // Impl for struct type
13 impl<T
> Iterable
for Vec
<T
> {
14 type Item
<'a
> where T
: 'a
= <std
::slice
::Iter
<'a
, T
> as Iterator
>::Item
;
15 type Iter
<'a
> where T
: 'a
= std
::slice
::Iter
<'a
, T
>;
17 fn iter
<'a
>(&'a
self) -> Self::Iter
<'a
> {
22 // Impl for a primitive type
23 impl<T
> Iterable
for [T
] {
24 type Item
<'a
> where T
: 'a
= <std
::slice
::Iter
<'a
, T
> as Iterator
>::Item
;
25 type Iter
<'a
> where T
: 'a
= std
::slice
::Iter
<'a
, T
>;
27 fn iter
<'a
>(&'a
self) -> Self::Iter
<'a
> {
32 fn make_iter
<'a
, I
: Iterable
+ ?Sized
>(it
: &'a I
) -> I
::Iter
<'a
> {
36 fn get_first
<'a
, I
: Iterable
+ ?Sized
>(it
: &'a I
) -> Option
<I
::Item
<'a
>> {
41 let v
= vec
![1, 2, 3];
42 assert_eq
!(v
, make_iter(&v
).copied().collect
::<Vec
<_
>>());
43 assert_eq
!(v
, make_iter(&*v
).copied().collect
::<Vec
<_
>>());
44 assert_eq
!(Some(&1), get_first(&v
));
45 assert_eq
!(Some(&1), get_first(&*v
));