9

Many iterators implement the Clone trait, but none of them implement the Copy trait. At least for simple iterators like std:slice::Iter, the Clone implementation looks like a memcpy anyway, so why isn't Copy also implemented?

Shepmaster
  • 388,571
  • 95
  • 1,107
  • 1,366
Perseids
  • 12,584
  • 5
  • 40
  • 64

1 Answers1

10

From PR #20790:

This PR also makes iterator non-implicitly copyable, as this was source of subtle bugs in the libraries. You can still use clone() to explictly copy the iterator.

DK.
  • 55,277
  • 5
  • 189
  • 162
  • 2
    Could you provide an example of one of these subtle bugs? – Shepmaster Sep 01 '15 at 11:08
  • 2
    @Shepmaster: I can't think of any. I assume it had something to do with iterators being passed into `for` loops, getting modified, but leaving the *original* iterator unmodified. – DK. Sep 01 '15 at 11:15
  • 3
    I found [one example](https://github.com/rust-lang/rust/pull/27186#issuecomment-123390413), validating your memory. – Shepmaster Sep 01 '15 at 22:30