# \`ExactSizeIterator\` for \`slice::Iter\`?

**URL:** <https://internals.rust-lang.org/t/exactsizeiterator-for-slice-iter/21480>\
**Category:** libs\
**Created:** [September 4, 2024, 2:33am UTC](https://internals.rust-lang.org/t/exactsizeiterator-for-slice-iter/21480 "2024-09-04T02:33:17Z")\
**Posts on this page:** 9\
**Page:** 1

<div class="post-metadata">

**Author:** ![Rudxain](https://sea2.discourse-cdn.com/flex002/user_avatar/internals.rust-lang.org/rudxain/32/12209_2.png) [@Rudxain](https://internals.rust-lang.org/u/Rudxain)\
**Post date:** [September 4, 2024, 2:33am UTC](https://internals.rust-lang.org/t/exactsizeiterator-for-slice-iter/21480/1 "2024-09-04T02:33:17Z")

</div>

Correct me if I'm wrong. I couldn't find the trait when reading `std`/`core` lib source code.

`[T]` has a `len` method (which, for some reason, [is `const`](https://doc.rust-lang.org/core/primitive.slice.html#method.len)??? how is that even possible?)

[`Iter` has the field `end_or_len`](https://doc.rust-lang.org/1.80.1/src/core/slice/iter.rs.html#74). So it seems the trait could be compatible.

> Related: [Why doesn't `Vec` implement `ExactSizeIterator` - The Rust Programming Language Forum](https://users.rust-lang.org/t/why-doesnt-vec-implement-exactsizeiterator/80838)

---

<div class="post-metadata">

**Author:** ![jrose](https://sea2.discourse-cdn.com/flex002/user_avatar/internals.rust-lang.org/jrose/32/9591_2.png) [@jrose](https://internals.rust-lang.org/u/jrose)\
**Post date:** [September 4, 2024, 2:37am UTC](https://internals.rust-lang.org/t/exactsizeiterator-for-slice-iter/21480/2 "2024-09-04T02:37:16Z")

</div>

[It’s in the docs](https://doc.rust-lang.org/std/slice/struct.Iter.html#impl-ExactSizeIterator-for-Iter%3C'_,+T%3E), so it must be in the source somewhere.

---

<div class="post-metadata">

**Author:** ![quinedot](https://sea2.discourse-cdn.com/flex002/user_avatar/internals.rust-lang.org/quinedot/32/7294_2.png) [@quinedot](https://internals.rust-lang.org/u/quinedot)\
**Post date:** [September 4, 2024, 2:48am UTC](https://internals.rust-lang.org/t/exactsizeiterator-for-slice-iter/21480/3 "2024-09-04T02:48:41Z")

</div>

> [@Rudxain](#):
>
> which, for some reason, [is `const`](https://doc.rust-lang.org/core/primitive.slice.html#method.len)??? how is that even possible?

`const` in this context means "callable during compile time".

---

<div class="post-metadata">

**Author:** ![Rudxain](https://sea2.discourse-cdn.com/flex002/user_avatar/internals.rust-lang.org/rudxain/32/12209_2.png) [@Rudxain](https://internals.rust-lang.org/u/Rudxain)\
**Post date:** [September 4, 2024, 3:10am UTC](https://internals.rust-lang.org/t/exactsizeiterator-for-slice-iter/21480/4 "2024-09-04T03:10:49Z")

</div>

That should be documented somewhere. If it isn't, where should I open a PR?

---

<div class="post-metadata">

**Author:** ![Rudxain](https://sea2.discourse-cdn.com/flex002/user_avatar/internals.rust-lang.org/rudxain/32/12209_2.png) [@Rudxain](https://internals.rust-lang.org/u/Rudxain)\
**Post date:** [September 4, 2024, 3:12am UTC](https://internals.rust-lang.org/t/exactsizeiterator-for-slice-iter/21480/5 "2024-09-04T03:12:45Z")

</div>

[I should've wrote this earlier 😅](https://play.rust-lang.org/?version=stable&mode=debug&edition=2021&gist=a8877bfeb96e62dd75b2372e9c280fc9)

---

<div class="post-metadata">

**Author:** ![quinedot](https://sea2.discourse-cdn.com/flex002/user_avatar/internals.rust-lang.org/quinedot/32/7294_2.png) [@quinedot](https://internals.rust-lang.org/u/quinedot)\
**Post date:** [September 4, 2024, 3:20am UTC](https://internals.rust-lang.org/t/exactsizeiterator-for-slice-iter/21480/6 "2024-09-04T03:20:50Z")

</div>

[https://doc.rust-lang.org/nightly/reference/const\_eval.html#const-functions](https://doc.rust-lang.org/nightly/reference/const_eval.html#const-functions)

---

<div class="post-metadata">

**Author:** ![Rudxain](https://sea2.discourse-cdn.com/flex002/user_avatar/internals.rust-lang.org/rudxain/32/12209_2.png) [@Rudxain](https://internals.rust-lang.org/u/Rudxain)\
**Post date:** [September 4, 2024, 4:15am UTC](https://internals.rust-lang.org/t/exactsizeiterator-for-slice-iter/21480/7 "2024-09-04T04:15:54Z")

</div>

I was reading [this](https://doc.rust-lang.org/1.80.1/src/core/slice/mod.rs.html#133-135) and I finally understood what it means: Despite `ptr::metadata` being `const` _unstable_, there's an attribute that tells the compiler to ignore the instability

---

<div class="post-metadata">

**Author:** ![Rudxain](https://sea2.discourse-cdn.com/flex002/user_avatar/internals.rust-lang.org/rudxain/32/12209_2.png) [@Rudxain](https://internals.rust-lang.org/u/Rudxain)\
**Post date:** [September 4, 2024, 4:16am UTC](https://internals.rust-lang.org/t/exactsizeiterator-for-slice-iter/21480/8 "2024-09-04T04:16:14Z")

</div>

Thanks to everyone who replied! And I'm sorry for the off-topic questions.

This thread can be closed now

---

<div class="post-metadata">

**Author:** ![steffahn](https://sea2.discourse-cdn.com/flex002/user_avatar/internals.rust-lang.org/steffahn/32/13288_2.png) [@steffahn](https://internals.rust-lang.org/u/steffahn)\
**Post date:** [February 26, 2026, 4:16am UTC](https://internals.rust-lang.org/t/exactsizeiterator-for-slice-iter/21480/11 "2026-02-26T04:16:24Z")

</div>

This topic was automatically closed 540 days after the last reply. New replies are no longer allowed.
