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

Reply via email to