]> git.lizzy.rs Git - rust.git/blob - tests/ui/iterators/into-iter-on-arrays-2018.rs
Rollup merge of #106661 - mjguzik:linux_statx, r=Mark-Simulacrum
[rust.git] / tests / ui / iterators / into-iter-on-arrays-2018.rs
1 // check-pass
2 // edition:2018
3
4 use std::array::IntoIter;
5 use std::ops::Deref;
6 use std::rc::Rc;
7 use std::slice::Iter;
8
9 fn main() {
10     let array = [0; 10];
11
12     // Before 2021, the method dispatched to `IntoIterator for &[T; N]`,
13     // which we continue to support for compatibility.
14     let _: Iter<'_, i32> = array.into_iter();
15     //~^ WARNING this method call resolves to `<&[T; N] as IntoIterator>::into_iter`
16     //~| WARNING this changes meaning
17
18     let _: Iter<'_, i32> = Box::new(array).into_iter();
19     //~^ WARNING this method call resolves to `<&[T; N] as IntoIterator>::into_iter`
20     //~| WARNING this changes meaning
21
22     let _: Iter<'_, i32> = Rc::new(array).into_iter();
23     //~^ WARNING this method call resolves to `<&[T; N] as IntoIterator>::into_iter`
24     //~| WARNING this changes meaning
25     let _: Iter<'_, i32> = Array(array).into_iter();
26     //~^ WARNING this method call resolves to `<&[T; N] as IntoIterator>::into_iter`
27     //~| WARNING this changes meaning
28
29     // But you can always use the trait method explicitly as an array.
30     let _: IntoIter<i32, 10> = IntoIterator::into_iter(array);
31
32     for _ in [1, 2, 3].into_iter() {}
33     //~^ WARNING this method call resolves to `<&[T; N] as IntoIterator>::into_iter`
34     //~| WARNING this changes meaning
35 }
36
37 /// User type that dereferences to an array.
38 struct Array([i32; 10]);
39
40 impl Deref for Array {
41     type Target = [i32; 10];
42
43     fn deref(&self) -> &Self::Target {
44         &self.0
45     }
46 }