On Thu, Sep 17, 2026 at 10:35 AM Eliot Courtney <[email protected]> wrote:
>
> from constants without a verbose turbofish syntax.
> For example, `const { NonZero::new(1).unwrap() }` can be written as
Word wrap or newline?
> +/// Creates a value from an integer constant expression, with validity
> checked at build time.
Maybe:
... a constant value ("cv") ...
since we explain that in the commit message, but not in the actual
documentation :)
I would also say "at compile time", and possibly mention it is usable
in const context (we use "build time" for things like `build_assert!`,
which can be much later, e.g. link time).
> + };
> + // Using `FromConst<V>::VALUE` means const generic expressions can't be
> used, since it requires
Newline between these two lines?
> +/// Types that can be created from an integer constant expression validated
> at build time.
Ditto (please see above).
> +/// Implement this trait to make a type usable with [`cv!`]. Use the [`cv`]
> macro, not this trait
The second intra-doc link should also have a `!` for consistency.
> + /// Fails the build if `V` is not a valid value for `Self`.
[`Self`]
> + // CAST: the macro is only used for types up to 64 bits
> wide, so `MIN` and `MAX`
"CAST: The"
> + // CAST: the assert above confirmed that `V` fits in `$type`.
Ditto.
> + // SAFETY: the assert above confirmed that `value` can be
> represented within `N`
Ditto.
Acked-by: Miguel Ojeda <[email protected]>
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);
Because that is quite surprising, especially since we say "with the
target type inferred from the context" in the documentation.
I hope that helps & thanks Eliot for working on this!
Cheers,
Miguel