]> git.lizzy.rs Git - rust.git/blob - src/test/ui/rfc-2632-const-trait-impl/tilde-const-and-const-params.rs
Rollup merge of #103031 - est31:match_guard_irrefutable_let, r=oli-obk
[rust.git] / src / test / ui / rfc-2632-const-trait-impl / tilde-const-and-const-params.rs
1 // check-pass
2 #![feature(const_trait_impl)]
3 #![feature(generic_arg_infer)]
4 #![feature(generic_const_exprs)]
5 #![allow(incomplete_features)]
6
7 struct Foo<const N: usize>;
8
9 impl<const N: usize> Foo<N> {
10    fn add<A: ~const Add42>(self) -> Foo<{ A::add(N) }> {
11       Foo
12    }
13 }
14
15 #[const_trait]
16 trait Add42 {
17     fn add(a: usize) -> usize;
18 }
19
20 impl const Add42 for () {
21     fn add(a: usize) -> usize {
22         a + 42
23     }
24 }
25
26 fn bar<A: ~const Add42, const N: usize>(_: Foo<N>) -> Foo<{ A::add(N) }> {
27     Foo
28 }
29
30 fn main() {
31    let foo = Foo::<0>;
32    let foo = bar::<(), _>(foo);
33    let _foo = bar::<(), _>(foo);
34 }