repeat_with() can return Iterator + Copy
Open
Nobody has claimed this yet.
A-iterators
C-bug
T-libs
- Dominant language
- Rust
- Stars
- 119k
- Forks
- 16.1k
- PR merge metrics
- PR metrics pending
Description
I tried this code:
let mut i = 0;
let iterator = repeat_with(move || {
i += 1;
i
});
let _ = iterator.take(1);
let _ = iterator.take(1);
I expected to see this happen:
This should fail to compile with an error like "use of moved value: iterator"
Instead, this happened:
It compiles and creates a copy of the iterator.
Meta
rustc --version --verbose:
rustc 1.89.0 (29483883e 2025-08-04)
binary: rustc
commit-hash: 29483883eed69d5fb4db01964cdf2af4d86e9cb2
commit-date: 2025-08-04
host: x86_64-unknown-linux-gnu
release: 1.89.0
LLVM version: 20.1.7
Contributor guide
First steps
- Read the whole issue, then the project's contributing guide.
- Comment on the issue to say you are picking it up — it saves two people doing the same work.
- Fork the repository and make your change on a branch.
- Open a pull request that references the issue number.
Research direction
Start by compiling the provided repeat_with() reproducer with rustc and inspect the repeat_with iterator's Copy behavior. Done means the second iterator.take(1) is rejected with a use-of-moved-value error, while valid repeat_with() usage continues to compile.
Written by the indexing model from the issue text.
Assessment
- Tech stack
- rust
- Domain
- compilers
- Issue type
- Bug
- Difficulty
- 3/5
- Estimated time
- 1-2 days
- Activity status
- Stale
- Clarity
- Mostly clear
- Newbie friendliness
- 45/100