]> git.lizzy.rs Git - rust.git/blob - src/test/ui/rfc-2632-const-trait-impl/const-impl-trait.rs
Auto merge of #105712 - amg98:feat/vita-support, r=wesleywiser
[rust.git] / src / test / ui / rfc-2632-const-trait-impl / const-impl-trait.rs
1 // check-pass
2 #![allow(incomplete_features)]
3 #![feature(
4     associated_type_bounds,
5     const_trait_impl,
6     const_cmp,
7     return_position_impl_trait_in_trait,
8 )]
9
10 use std::marker::Destruct;
11
12 const fn cmp(a: &impl ~const PartialEq) -> bool {
13     a == a
14 }
15
16 const fn wrap(x: impl ~const PartialEq + ~const Destruct)
17     -> impl ~const PartialEq + ~const Destruct
18 {
19     x
20 }
21
22 #[const_trait]
23 trait Foo {
24     fn huh() -> impl ~const PartialEq + ~const Destruct + Copy;
25 }
26
27 impl const Foo for () {
28     fn huh() -> impl ~const PartialEq + ~const Destruct + Copy {
29         123
30     }
31 }
32
33 const _: () = {
34     assert!(cmp(&0xDEADBEEFu32));
35     assert!(cmp(&()));
36     assert!(wrap(123) == wrap(123));
37     assert!(wrap(123) != wrap(456));
38     let x = <() as Foo>::huh();
39     assert!(x == x);
40 };
41
42 #[const_trait]
43 trait T {}
44 struct S;
45 impl const T for S {}
46
47 const fn rpit() -> impl ~const T { S }
48
49 const fn apit(_: impl ~const T + ~const Destruct) {}
50
51 const fn rpit_assoc_bound() -> impl IntoIterator<Item: ~const T> { Some(S) }
52
53 const fn apit_assoc_bound(_: impl IntoIterator<Item: ~const T> + ~const Destruct) {}
54
55 fn main() {}