That situation looks not like a cast problem to me, but instead like
where it would be (using my current favourite proposal)
let (low, high) = self.mul_with_carry(*rhs, 0);
low.wrapping_sub(high)
And that snippit is a great example of why as scares me:
That’s casting &_ to u64, which feels to me like it could be a ptr2int cast. I assume it’s not, and it’s doing what you wanted, but it’s really quite hard to be sure.