> A language with copy constructors doesn't prevent you from putting a bug in them.
If you don't override it, it will copy everything properly.
> Rust might have put a 0 in the uninitialized member
Rust does not do that. If a member is not initialised, it's uninitialised and in this case the structure will be rejected. Here even if you could not just have derived Clone (struct bio looks non-trivial) your hand-rolled implementation would have complained that you had not properly initialised the member.
> If you don't override it, it will copy everything properly.
Sure, so does memcpy or bare struct assignment in C. The problem is that trivial copy constructors are relatively rare.
> Here even if you could not just have derived Clone (struct bio looks non-trivial) your hand-rolled implementation would have complained that you had not properly initialised the member.
Right, but this is more similar to an assignment operator. DerefMut in Rust I think wouldn't have caught the bug.
C++ or Rust might have put a 0 in the uninitialized member, but the bug would have remained.