//@ check-pass //@ edition:2018 use std::ops::Deref; use std::rc::Rc; use std::slice::Iter; use std::vec::IntoIter; fn main() { let boxed_slice = vec![0; 10].into_boxed_slice(); // Before 2024, the method dispatched to `IntoIterator for Box<[T]>`, // which we continue to support for compatibility. let _: Iter<'_, i32> = boxed_slice.into_iter(); //~^ WARNING this method call resolves to `<&Box<[T]> as IntoIterator>::into_iter` //~| WARNING this changes meaning let _: Iter<'_, i32> = Box::new(boxed_slice.clone()).into_iter(); //~^ WARNING this method call resolves to `<&Box<[T]> as IntoIterator>::into_iter` //~| WARNING this changes meaning let _: Iter<'_, i32> = Rc::new(boxed_slice.clone()).into_iter(); //~^ WARNING this method call resolves to `<&Box<[T]> as IntoIterator>::into_iter` //~| WARNING this changes meaning let _: Iter<'_, i32> = Array(boxed_slice.clone()).into_iter(); //~^ WARNING this method call resolves to `<&Box<[T]> as IntoIterator>::into_iter` //~| WARNING this changes meaning // But you can always use the trait method explicitly as an boxed_slice. let _: IntoIter = IntoIterator::into_iter(boxed_slice); for _ in (Box::new([1, 2, 3]) as Box<[_]>).into_iter() {} //~^ WARNING this method call resolves to `<&Box<[T]> as IntoIterator>::into_iter` //~| WARNING this changes meaning } /// User type that dereferences to a boxed slice. struct Array(Box<[i32]>); impl Deref for Array { type Target = Box<[i32]>; fn deref(&self) -> &Self::Target { &self.0 } }