]> git.lizzy.rs Git - rust.git/blob - src/tools/miri/tests/pass/tuple_like_enum_variant_constructor_struct_pointer_opt.rs
Auto merge of #104915 - weihanglo:update-cargo, r=ehuss
[rust.git] / src / tools / miri / tests / pass / tuple_like_enum_variant_constructor_struct_pointer_opt.rs
1 #[derive(Copy, Clone, PartialEq, Debug)]
2 struct A<'a> {
3     x: i32,
4     y: &'a i32,
5 }
6
7 #[derive(Copy, Clone, PartialEq, Debug)]
8 struct B<'a>(i32, &'a i32);
9
10 #[derive(Copy, Clone, PartialEq, Debug)]
11 enum C<'a> {
12     Value(i32, &'a i32),
13     #[allow(dead_code)]
14     NoValue,
15 }
16
17 fn main() {
18     let x = 5;
19     let a = A { x: 99, y: &x };
20     assert_eq!(Some(a).map(Some), Some(Some(a)));
21     let f = B;
22     assert_eq!(Some(B(42, &x)), Some(f(42, &x)));
23     // the following doesn't compile :(
24     //let f: for<'a> fn(i32, &'a i32) -> B<'a> = B;
25     //assert_eq!(Some(B(42, &x)), Some(f(42, &x)));
26     assert_eq!(B(42, &x), foo(&x, B));
27     let f = C::Value;
28     assert_eq!(C::Value(42, &x), f(42, &x));
29 }
30
31 fn foo<'a, F: Fn(i32, &'a i32) -> B<'a>>(i: &'a i32, f: F) -> B<'a> {
32     f(42, i)
33 }