]> git.lizzy.rs Git - rust.git/blob - src/test/ui/const-generics/generic_const_exprs/abstract-const-as-cast-3.rs
Move generic error message to separate branches
[rust.git] / src / test / ui / const-generics / generic_const_exprs / abstract-const-as-cast-3.rs
1 #![feature(generic_const_exprs)]
2 #![allow(incomplete_features)]
3
4 trait Trait {}
5 pub struct EvaluatableU128<const N: u128>;
6
7 struct HasCastInTraitImpl<const N: usize, const M: u128>;
8 impl<const O: usize> Trait for HasCastInTraitImpl<O, { O as u128 }> {}
9
10 pub fn use_trait_impl<const N: usize>()
11 where
12     [(); { N + 1}]:,
13     EvaluatableU128<{N as u128}>:, {
14     fn assert_impl<T: Trait>() {}
15
16     // errors are bad but seems to be pre-existing issue #86198
17     assert_impl::<HasCastInTraitImpl<{ N + 1 }, { N as u128 }>>();
18     //~^ Error: mismatched types
19     //~^^ Error: unconstrained generic constant
20     assert_impl::<HasCastInTraitImpl<{ N + 1 }, { N as _ }>>();
21     //~^ Error: mismatched types
22     //~^^ Error: unconstrained generic constant
23     assert_impl::<HasCastInTraitImpl<13, { 12 as u128 }>>();
24     //~^ Error: mismatched types
25     assert_impl::<HasCastInTraitImpl<14, 13>>();
26     //~^ Error: mismatched types
27 }
28 pub fn use_trait_impl_2<const N: usize>()
29 where
30     [(); { N + 1}]:,
31     EvaluatableU128<{N as _}>:, {
32     fn assert_impl<T: Trait>() {}
33
34     // errors are bad but seems to be pre-existing issue #86198
35     assert_impl::<HasCastInTraitImpl<{ N + 1 }, { N as u128 }>>();
36     //~^ Error: mismatched types
37     //~^^ Error: unconstrained generic constant
38     assert_impl::<HasCastInTraitImpl<{ N + 1 }, { N as _ }>>();
39     //~^ Error: mismatched types
40     //~^^ Error: unconstrained generic constant
41     assert_impl::<HasCastInTraitImpl<13, { 12 as u128 }>>();
42     //~^ Error: mismatched types
43     assert_impl::<HasCastInTraitImpl<14, 13>>();
44     //~^ Error: mismatched types
45 }
46
47 fn main() {}