On Sun Jun 15, 2025 at 2:31 AM JST, Boqun Feng wrote: > On Thu, Jun 12, 2025 at 11:01:32PM +0900, Alexandre Courbot wrote: > [...] >> +/// An unsigned integer which is guaranteed to be a power of 2. >> +#[derive(Debug, Clone, Copy)] >> +#[repr(transparent)] >> +pub struct PowerOfTwo<T>(T); >> + > [...] >> +impl<T> Deref for PowerOfTwo<T> { > > Why do we need `impl Deref` (and the `impl Borrow` below)? A similar > concept `NonZero` in std doesn't impl them as well.
I wanted to be exhaustive but you're right, we don't really need these implementations (especially if `NonZero` doesn't provide them either). > >> + type Target = T; >> + >> + fn deref(&self) -> &Self::Target { >> + &self.0 >> + } >> +} >> + >> +impl<T> PartialEq for PowerOfTwo<T> > > Any reason you want to impl these manually instead of deriving? For > `NonZero`, the std wants to impl these traits only for > `ZeroablePrimitive` types, but we don't have a similar trait here. Deriving works perfectly well! :) Thanks for pointing this out.