61 lines
981 B
Rust
61 lines
981 B
Rust
// edition:2018
|
|
// check-pass
|
|
#![allow(unused)]
|
|
#![deny(rust_2021_prelude_collisions)]
|
|
|
|
struct S;
|
|
|
|
impl S {
|
|
fn try_into(self) -> S {
|
|
S
|
|
}
|
|
}
|
|
|
|
struct X;
|
|
|
|
trait Hey {
|
|
fn from_iter(_: i32) -> Self;
|
|
}
|
|
|
|
impl Hey for X {
|
|
fn from_iter(_: i32) -> Self {
|
|
X
|
|
}
|
|
}
|
|
|
|
struct Y<T>(T);
|
|
|
|
impl Hey for Y<i32> {
|
|
fn from_iter(_: i32) -> Self {
|
|
Y(0)
|
|
}
|
|
}
|
|
|
|
struct Z<T>(T);
|
|
|
|
impl Hey for Z<i32> {
|
|
fn from_iter(_: i32) -> Self {
|
|
Z(0)
|
|
}
|
|
}
|
|
|
|
impl std::iter::FromIterator<u32> for Z<u32> {
|
|
fn from_iter<T: IntoIterator<Item = u32>>(_: T) -> Self {
|
|
todo!()
|
|
}
|
|
}
|
|
|
|
fn main() {
|
|
// See https://github.com/rust-lang/rust/issues/86633
|
|
let s = S;
|
|
let s2 = s.try_into();
|
|
|
|
// Check that we do not issue suggestions for types that do not implement `FromIter`.
|
|
//
|
|
// See https://github.com/rust-lang/rust/issues/86902
|
|
X::from_iter(1);
|
|
Y::from_iter(1);
|
|
Y::<i32>::from_iter(1);
|
|
Z::<i32>::from_iter(1);
|
|
}
|