Re: [PATCH v4 1/2] rust: num: add cv! macro to create values from constant expressions
From: Alexandre Courbot
Date: Thu Oct 08 2026 - 11:04:29 EST
On Sat Oct 3, 2026 at 1:59 AM JST, Miguel Ojeda wrote:
<...>
> One thing before that, though: are these assertions expected to fail?
>
> const X: i64 = 1 << 31;
> const Y: i64 = cv!(1 << 31);
> assert_eq!(X, Y);
>
> Or:
>
> const X: u64 = 2 << 31;
> const Y: u64 = cv!(2 << 31);
> assert_eq!(X, Y);
I have tested and both fail indeed. However they pass if the `cv!` literal
is annotated with the correct type (e.g. `cv!(1i64 << 31)`).
>
> Because that is quite surprising, especially since we say "with the
> target type inferred from the context" in the documentation.
The target type is indeed inferred, but the expression is typed by
itself, so unsuffixed literals default to `i32` as they would in a `let`
statement without annotation. That limitation is inherent to the design
widening to `i128` I am afraid.
I don't know if that's a blocker, but if not, we should probably have a
`Pitfalls` section to mention that explicitly.