]> git.lizzy.rs Git - rust.git/blob - tests/ui/mir/issue-75053.rs
Rollup merge of #106692 - eggyal:mv-binary_heap.rs-binary_heap/mod.rs, r=Mark-Simulacrum
[rust.git] / tests / ui / mir / issue-75053.rs
1 // compile-flags: -Z mir-opt-level=3
2
3 #![feature(type_alias_impl_trait, rustc_attrs)]
4
5 use std::marker::PhantomData;
6
7 trait MyIndex<T> {
8     type O;
9     fn my_index(self) -> Self::O;
10 }
11 trait MyFrom<T>: Sized {
12     type Error;
13     fn my_from(value: T) -> Result<Self, Self::Error>;
14 }
15
16 trait F {}
17 impl F for () {}
18 type DummyT<T> = impl F;
19 fn _dummy_t<T>() -> DummyT<T> {}
20
21 struct Phantom1<T>(PhantomData<T>);
22 struct Phantom2<T>(PhantomData<T>);
23 struct Scope<T>(Phantom2<DummyT<T>>);
24
25 impl<T> Scope<T> {
26     fn new() -> Self {
27         unimplemented!()
28     }
29 }
30
31 impl<T> MyFrom<Phantom2<T>> for Phantom1<T> {
32     type Error = ();
33     fn my_from(_: Phantom2<T>) -> Result<Self, Self::Error> {
34         unimplemented!()
35     }
36 }
37
38 impl<T: MyFrom<Phantom2<DummyT<U>>>, U> MyIndex<Phantom1<T>> for Scope<U> {
39     type O = T;
40     fn my_index(self) -> Self::O {
41         MyFrom::my_from(self.0).ok().unwrap()
42     }
43 }
44
45 #[rustc_error]
46 fn main() {
47     //~^ ERROR
48     let _pos: Phantom1<DummyT<()>> = Scope::new().my_index();
49 }