diff options
| author | Manish Goregaokar <manishsmail@gmail.com> | 2015-02-15 18:30:56 +0530 |
|---|---|---|
| committer | Manish Goregaokar <manishsmail@gmail.com> | 2015-02-15 18:42:44 +0530 |
| commit | 1b86ebe25751268aa39ef2ad5e2b0e650a6f0291 (patch) | |
| tree | 35f5e2c0b9ba4a12fc18d93a41363275cc9f9299 | |
| parent | 0f66e314db851f711dc544ecd91d9b4ceb76b932 (diff) | |
| parent | b19fda0ceb820af57f00976951dba95a3c0419aa (diff) | |
| download | rust-1b86ebe25751268aa39ef2ad5e2b0e650a6f0291.tar.gz rust-1b86ebe25751268aa39ef2ad5e2b0e650a6f0291.zip | |
Rollup merge of #22299 - bluss:range-64-is-not-exact-size, r=alexcrichton
Fixes #22047 `Range<u64>` and `Range<i64>` may be longer than usize::MAX on 32-bit platforms, and thus they cannot fulfill the protocol for ExactSizeIterator. We don't want a nonobvious platform dependency in basic iterator traits, so the trait impl is removed. The logic of this change assumes that usize is at least 32-bit. This is technically a breaking change; note that `Range<usize>` and `Range<isize>` are always ExactSizeIterators. [breaking-change]
| -rw-r--r-- | src/libcore/iter.rs | 4 |
1 files changed, 2 insertions, 2 deletions
diff --git a/src/libcore/iter.rs b/src/libcore/iter.rs index 7740cd6867c..06aba2cb08e 100644 --- a/src/libcore/iter.rs +++ b/src/libcore/iter.rs @@ -2676,9 +2676,9 @@ impl<A: Int> Iterator for ::ops::Range<A> { } } +// Ranges of u64 and i64 are excluded because they cannot guarantee having +// a length <= usize::MAX, which is required by ExactSizeIterator. range_exact_iter_impl!(usize u8 u16 u32 isize i8 i16 i32); -#[cfg(target_pointer_width = "64")] -range_exact_iter_impl!(u64 i64); #[stable(feature = "rust1", since = "1.0.0")] impl<A: Int> DoubleEndedIterator for ::ops::Range<A> { |
