rust/src/libcore/iter
Ralf Jung 93d45a01e7
Rollup merge of #72368 - CAD97:rangeto, r=dtolnay
Resolve overflow behavior for RangeFrom

This specifies a documented unspecified implementation detail of `RangeFrom` and makes it consistently implement the specified behavior.

Specifically, `(u8::MAX).next()` is defined to cause an overflow, and resolve that overflow in the same manner as the `Step::forward` implementation.

The inconsistency that has existed is `<RangeFrom as Iterator>::nth`. The existing behavior should be plain to see after #69659: the skipping part previously always panicked if it caused an overflow, but the final step (to set up the state for further iteration) has always been debug-checked.

The inconsistency, then, is that `RangeFrom::nth` does not implement the same behavior as the naive (and default) implementation of just calling `next` multiple times. This PR aligns `RangeFrom::nth` to have identical behavior to the naive implementation. It also lines up with the standard behavior of primitive math in Rust everywhere else in the language: debug checked overflow.

cc @Amanieu

---

Followup to #69659. Closes #25708 (by documenting the panic as intended).

The documentation wording is preliminary and can probably be improved.

This will probably need an FCP, as it changes observable stable behavior.
2020-05-30 13:45:02 +02:00
..
adapters Rollup merge of #72310 - jyn514:peekable-next-if, r=dtolnay 2020-05-29 20:21:11 +02:00
traits Add extend_one tracking issue 72631 2020-05-29 17:05:17 -07:00
mod.rs Improve documentation on iterators 2020-02-16 17:12:26 +01:00
range.rs Rollup merge of #72368 - CAD97:rangeto, r=dtolnay 2020-05-30 13:45:02 +02:00
sources.rs Stop accessing module level int consts via crate::<Ty> 2020-04-20 23:38:06 +02:00