Skip to content

rustdoc: Only build extern trait impls if needed#159623

Merged
rust-bors[bot] merged 4 commits into
rust-lang:mainfrom
camelid:good-impls
Jul 22, 2026
Merged

rustdoc: Only build extern trait impls if needed#159623
rust-bors[bot] merged 4 commits into
rust-lang:mainfrom
camelid:good-impls

Conversation

@camelid

@camelid camelid commented Jul 20, 2026

Copy link
Copy Markdown
Member

View all comments

or, finally remove the BadImplStripper!

Building inlined impls is expensive, and most of them end up being
unneeded and stripped later in this function. So we should filter them
ahead of time. This requires inlining external auto traits when we
construct auto impls, since this no longer happens as a side effect.

We inline external impls when they are

  • for generics (i.e., blanket impls)
  • for primitive types (probably this should be handled below really)
  • for a type (inlined) in the current crate
  • of a trait (inlined) in the current crate
  • of Deref
    These rules are based on the existing filtering rules that are applied
    after building the inlined impls.

After doing the filtering ahead of time, we can remove the downstream
filtering. Thus, we can finally remove BadImplStripper and unused
deref-following logic. It appears that all this Deref logic was pointless
in the first place since following derefs already happens elsewhere in
rustdoc, where it is actually needed.

@rustbot rustbot added S-waiting-on-author Status: This is awaiting some action (such as code changes or more information) from the author. T-rustdoc Relevant to the rustdoc team, which will review and decide on the PR/issue. labels Jul 20, 2026
@camelid

camelid commented Jul 20, 2026

Copy link
Copy Markdown
Member Author

@bors try @rust-timer queue

@rust-timer

This comment has been minimized.

@rustbot rustbot added the S-waiting-on-perf Status: Waiting on a perf run to be completed. label Jul 20, 2026
@rust-bors

This comment has been minimized.

rust-bors Bot pushed a commit that referenced this pull request Jul 20, 2026
rustdoc: Only build extern trait impls if needed
@rust-log-analyzer

This comment has been minimized.

@rust-bors

rust-bors Bot commented Jul 20, 2026

Copy link
Copy Markdown
Contributor

☀️ Try build successful (CI)
Build commit: 2706e41 (2706e41b9187e2caefe5e7291b7697fb2c00a3a3)
Base parent: d527bc9 (d527bc9bfa297ca7fd7f5ae93781eeec42073170)

@rust-timer

This comment has been minimized.

@rust-timer

Copy link
Copy Markdown
Collaborator

Finished benchmarking commit (2706e41): comparison URL.

Overall result: ❌✅ regressions and improvements - please read:

Benchmarking means the PR may be perf-sensitive. It's automatically marked not fit for rolling up. Overriding is possible but disadvised: it risks changing compiler perf.

Next, please: If you can, justify the regressions found in this try perf run in writing along with @rustbot label: +perf-regression-triaged. If not, fix the regressions and do another perf run. Neutral or positive results will clear the label automatically.

@bors rollup=never rustc-perf
@rustbot label: -S-waiting-on-perf +perf-regression

Instruction count

Our most reliable metric. Used to determine the overall result above. However, even this metric can be noisy.

mean range count
Regressions ❌
(primary)
2.3% [2.3%, 2.3%] 1
Regressions ❌
(secondary)
2.3% [2.3%, 2.3%] 1
Improvements ✅
(primary)
-12.4% [-37.6%, -0.5%] 19
Improvements ✅
(secondary)
-24.7% [-38.9%, -4.9%] 24
All ❌✅ (primary) -11.6% [-37.6%, 2.3%] 20

Max RSS (memory usage)

Results (primary -12.4%, secondary -16.5%)

A less reliable metric. May be of interest, but not used to determine the overall result above.

mean range count
Regressions ❌
(primary)
1.7% [1.7%, 1.7%] 1
Regressions ❌
(secondary)
1.8% [1.8%, 1.8%] 1
Improvements ✅
(primary)
-13.1% [-19.9%, -4.3%] 19
Improvements ✅
(secondary)
-17.3% [-22.9%, -6.0%] 24
All ❌✅ (primary) -12.4% [-19.9%, 1.7%] 20

Cycles

Results (primary -16.3%, secondary -31.3%)

A less reliable metric. May be of interest, but not used to determine the overall result above.

mean range count
Regressions ❌
(primary)
- - 0
Regressions ❌
(secondary)
- - 0
Improvements ✅
(primary)
-16.3% [-43.4%, -2.6%] 20
Improvements ✅
(secondary)
-31.3% [-44.5%, -6.1%] 24
All ❌✅ (primary) -16.3% [-43.4%, -2.6%] 20

Binary size

This perf run didn't have relevant results for this metric.

Bootstrap: 489.235s -> 486.86s (-0.49%)
Artifact size: 391.81 MiB -> 391.79 MiB (-0.01%)

@rustbot rustbot added perf-regression Performance regression. and removed S-waiting-on-perf Status: Waiting on a perf run to be completed. labels Jul 20, 2026
camelid added 3 commits July 21, 2026 15:53
Building inlined impls is expensive, and most of them end up being
unneeded and stripped later in this function. So we should filter them
ahead of time. This requires inlining external auto traits when we
construct auto impls, since this no longer happens as a side effect.

We inline external impls when they are
* for generics (i.e., blanket impls)
* for primitive types (probably this should be handled below really)
* for a type (inlined) in the current crate
* of a trait (inlined) in the current crate
* of `Deref`
These rules are based on the existing filtering rules that are applied
after building the inlined impls.
Now that we do filtering ahead of time, the `BadImplStripper` is
unnecessary. Also, it appears that all this `Deref` logic was pointless
in the first place since following derefs already happens elsewhere in
rustdoc, where it is actually needed.
@notriddle

Copy link
Copy Markdown
Contributor

ship it

@camelid
camelid marked this pull request as ready for review July 21, 2026 17:09
@rustbot rustbot added the S-waiting-on-review Status: Awaiting review from the assignee but also interested parties. label Jul 21, 2026
@rustbot rustbot removed the S-waiting-on-author Status: This is awaiting some action (such as code changes or more information) from the author. label Jul 21, 2026
@rustbot

rustbot commented Jul 21, 2026

Copy link
Copy Markdown
Collaborator

r? @notriddle

rustbot has assigned @notriddle.
They will have a look at your PR within the next two weeks and either review your PR or reassign to another reviewer.

Use r? to explicitly pick a reviewer

Why was this reviewer chosen?

The reviewer was selected based on:

  • Owners of files modified in this PR: rustdoc
  • rustdoc expanded to 8 candidates
  • Random selection from GuillaumeGomez, lolbinarycat, notriddle

@camelid

camelid commented Jul 21, 2026

Copy link
Copy Markdown
Member Author

r? @notriddle
cc @GuillaumeGomez

@rustbot

rustbot commented Jul 21, 2026

Copy link
Copy Markdown
Collaborator

Requested reviewer is already assigned to this pull request.

Please choose another assignee.

@camelid

camelid commented Jul 21, 2026

Copy link
Copy Markdown
Member Author

I had to make a tweak to get #[doc(notable_trait)] working again (it was depending on a side effect of the old code -- Hyrum's Law!). Let me know if you want to run perf again before merging, though I expect the improvement will be pretty comparable.

@camelid camelid added the relnotes-perf Performance improvements that should be mentioned in the release notes. label Jul 21, 2026
@rust-log-analyzer

This comment has been minimized.

@camelid

camelid commented Jul 21, 2026

Copy link
Copy Markdown
Member Author

That's weird, I could've sworn rustdoc-html was passing before, but it indeed fails locally on my machine (related to notable_trait still I think).

@rustbot rustbot added the S-waiting-on-perf Status: Waiting on a perf run to be completed. label Jul 21, 2026
@rust-bors

This comment has been minimized.

rust-bors Bot pushed a commit that referenced this pull request Jul 21, 2026
rustdoc: Only build extern trait impls if needed
@rust-bors

rust-bors Bot commented Jul 21, 2026

Copy link
Copy Markdown
Contributor

☀️ Try build successful (CI)
Build commit: 48bcd19 (48bcd19aca419faea5c6a27f1a1a613b72f94be4)
Base parent: f65b272 (f65b272fc92b1e7527dea4a224430a249ab25c2d)

@rust-timer

This comment has been minimized.

@rust-timer

Copy link
Copy Markdown
Collaborator

Finished benchmarking commit (48bcd19): comparison URL.

Overall result: ❌✅ regressions and improvements - please read:

Benchmarking means the PR may be perf-sensitive. It's automatically marked not fit for rolling up. Overriding is possible but disadvised: it risks changing compiler perf.

Next, please: If you can, justify the regressions found in this try perf run in writing along with @rustbot label: +perf-regression-triaged. If not, fix the regressions and do another perf run. Neutral or positive results will clear the label automatically.

@bors rollup=never rustc-perf
@rustbot label: -S-waiting-on-perf +perf-regression

Instruction count

Our most reliable metric. Used to determine the overall result above. However, even this metric can be noisy.

mean range count
Regressions ❌
(primary)
1.4% [0.6%, 2.2%] 2
Regressions ❌
(secondary)
2.2% [2.2%, 2.2%] 1
Improvements ✅
(primary)
-10.8% [-30.8%, -1.7%] 18
Improvements ✅
(secondary)
-20.3% [-31.4%, -4.0%] 24
All ❌✅ (primary) -9.6% [-30.8%, 2.2%] 20

Max RSS (memory usage)

Results (primary -10.9%, secondary -12.7%)

A less reliable metric. May be of interest, but not used to determine the overall result above.

mean range count
Regressions ❌
(primary)
1.5% [1.5%, 1.5%] 1
Regressions ❌
(secondary)
3.2% [1.5%, 4.9%] 2
Improvements ✅
(primary)
-11.6% [-17.6%, -2.7%] 19
Improvements ✅
(secondary)
-14.0% [-18.7%, -4.2%] 26
All ❌✅ (primary) -10.9% [-17.6%, 1.5%] 20

Cycles

Results (primary -14.9%, secondary -25.7%)

A less reliable metric. May be of interest, but not used to determine the overall result above.

mean range count
Regressions ❌
(primary)
- - 0
Regressions ❌
(secondary)
2.5% [2.5%, 2.5%] 1
Improvements ✅
(primary)
-14.9% [-36.5%, -2.8%] 18
Improvements ✅
(secondary)
-27.0% [-36.5%, -8.1%] 23
All ❌✅ (primary) -14.9% [-36.5%, -2.8%] 18

Binary size

Results (primary 0.0%, secondary 0.0%)

A less reliable metric. May be of interest, but not used to determine the overall result above.

mean range count
Regressions ❌
(primary)
0.0% [0.0%, 0.0%] 4
Regressions ❌
(secondary)
0.0% [0.0%, 0.1%] 16
Improvements ✅
(primary)
- - 0
Improvements ✅
(secondary)
- - 0
All ❌✅ (primary) 0.0% [0.0%, 0.0%] 4

Bootstrap: 487.415s -> 485.578s (-0.38%)
Artifact size: 387.80 MiB -> 387.81 MiB (0.00%)

@rustbot rustbot removed the S-waiting-on-perf Status: Waiting on a perf run to be completed. label Jul 21, 2026
let self_ty = tcx.type_of(impl_def_id).instantiate_identity().skip_norm_wip();
let self_ty =
clean_middle_ty(ty::Binder::dummy(self_ty), cx, Some(impl_def_id), None);
if self_ty.is_full_generic()

@GuillaumeGomez GuillaumeGomez Jul 21, 2026

Copy link
Copy Markdown
Member

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

I think a code comment explaining what's going on here would be nice. ;)

View changes since the review

Copy link
Copy Markdown
Member Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

It's explained in the commit message, but yeah a comment would probably be good too.

@@ -1 +1 @@
<script type="text/json" id="notable-traits-data">{"Odd":"&lt;h3&gt;Notable traits for &lt;code&gt;&lt;a class=\"struct\" href=\"struct.Odd.html\" title=\"struct foo::Odd\"&gt;Odd&lt;/a&gt;&lt;/code&gt;&lt;/h3&gt;&lt;pre&gt;&lt;code&gt;&lt;div class=\"where\"&gt;impl &lt;a class=\"trait\" href=\"{{channel}}/core/iter/traits/iterator/trait.Iterator.html\" title=\"trait core::iter::traits::iterator::Iterator\"&gt;Iterator&lt;/a&gt; for &lt;a class=\"struct\" href=\"struct.Odd.html\" title=\"struct foo::Odd\"&gt;Odd&lt;/a&gt;&lt;/div&gt;&lt;div class=\"where\"&gt; type &lt;a href=\"{{channel}}/core/iter/traits/iterator/trait.Iterator.html#associatedtype.Item\" class=\"associatedtype\"&gt;Item&lt;/a&gt; = &lt;a class=\"primitive\" href=\"{{channel}}/std/primitive.usize.html\"&gt;usize&lt;/a&gt;;&lt;/div&gt;"}</script> No newline at end of file
<script type="text/json" id="notable-traits-data">{"ArrayChunks&lt;Self, N&gt;":"&lt;h3&gt;Notable traits for &lt;code&gt;&lt;a class=\"struct\" href=\"{{channel}}/core/iter/adapters/array_chunks/struct.ArrayChunks.html\" title=\"struct core::iter::adapters::array_chunks::ArrayChunks\"&gt;ArrayChunks&lt;/a&gt;&amp;lt;I, N&amp;gt;&lt;/code&gt;&lt;/h3&gt;&lt;pre&gt;&lt;code&gt;&lt;div class=\"where\"&gt;impl&amp;lt;I, const N: &lt;a class=\"primitive\" href=\"{{channel}}/std/primitive.usize.html\"&gt;usize&lt;/a&gt;&amp;gt; &lt;a class=\"trait\" href=\"{{channel}}/core/iter/traits/iterator/trait.Iterator.html\" title=\"trait core::iter::traits::iterator::Iterator\"&gt;Iterator&lt;/a&gt; for &lt;a class=\"struct\" href=\"{{channel}}/core/iter/adapters/array_chunks/struct.ArrayChunks.html\" title=\"struct core::iter::adapters::array_chunks::ArrayChunks\"&gt;ArrayChunks&lt;/a&gt;&amp;lt;I, N&amp;gt;&lt;div class=\"where\"&gt;where\n I: &lt;a class=\"trait\" href=\"{{channel}}/core/iter/traits/iterator/trait.Iterator.html\" title=\"trait core::iter::traits::iterator::Iterator\"&gt;Iterator&lt;/a&gt;,&lt;/div&gt;&lt;/div&gt;&lt;div class=\"where\"&gt; type &lt;a href=\"{{channel}}/core/iter/traits/iterator/trait.Iterator.html#associatedtype.Item\" class=\"associatedtype\"&gt;Item&lt;/a&gt; = [&amp;lt;I as &lt;a class=\"trait\" href=\"{{channel}}/core/iter/traits/iterator/trait.Iterator.html\" title=\"trait core::iter::traits::iterator::Iterator\"&gt;Iterator&lt;/a&gt;&amp;gt;::&lt;a class=\"associatedtype\" href=\"{{channel}}/core/iter/traits/iterator/trait.Iterator.html#associatedtype.Item\" title=\"type core::iter::traits::iterator::Iterator::Item\"&gt;Item&lt;/a&gt;; &lt;a class=\"primitive\" href=\"{{channel}}/std/primitive.array.html\"&gt;N&lt;/a&gt;];&lt;/div&gt;","Chain&lt;Self, &lt;U as IntoIterator&gt;::IntoIter&gt;":"&lt;h3&gt;Notable traits for &lt;code&gt;&lt;a class=\"struct\" href=\"{{channel}}/core/iter/adapters/chain/struct.Chain.html\" title=\"struct core::iter::adapters::chain::Chain\"&gt;Chain&lt;/a&gt;&amp;lt;A, B&amp;gt;&lt;/code&gt;&lt;/h3&gt;&lt;pre&gt;&lt;code&gt;&lt;div class=\"where\"&gt;impl&amp;lt;A, B&amp;gt; &lt;a class=\"trait\" href=\"{{channel}}/core/iter/traits/iterator/trait.Iterator.html\" title=\"trait core::iter::traits::iterator::Iterator\"&gt;Iterator&lt;/a&gt; for &lt;a class=\"struct\" href=\"{{channel}}/core/iter/adapters/chain/struct.Chain.html\" title=\"struct core::iter::adapters::chain::Chain\"&gt;Chain&lt;/a&gt;&amp;lt;A, B&amp;gt;&lt;div class=\"where\"&gt;where\n A: &lt;a class=\"trait\" href=\"{{channel}}/core/iter/traits/iterator/trait.Iterator.html\" title=\"trait core::iter::traits::iterator::Iterator\"&gt;Iterator&lt;/a&gt;,\n B: &lt;a class=\"trait\" href=\"{{channel}}/core/iter/traits/iterator/trait.Iterator.html\" title=\"trait core::iter::traits::iterator::Iterator\"&gt;Iterator&lt;/a&gt;&amp;lt;Item = &amp;lt;A as &lt;a class=\"trait\" href=\"{{channel}}/core/iter/traits/iterator/trait.Iterator.html\" title=\"trait core::iter::traits::iterator::Iterator\"&gt;Iterator&lt;/a&gt;&amp;gt;::&lt;a class=\"associatedtype\" href=\"{{channel}}/core/iter/traits/iterator/trait.Iterator.html#associatedtype.Item\" title=\"type core::iter::traits::iterator::Iterator::Item\"&gt;Item&lt;/a&gt;&amp;gt;,&lt;/div&gt;&lt;/div&gt;&lt;div class=\"where\"&gt; type &lt;a href=\"{{channel}}/core/iter/traits/iterator/trait.Iterator.html#associatedtype.Item\" class=\"associatedtype\"&gt;Item&lt;/a&gt; = &amp;lt;A as &lt;a class=\"trait\" href=\"{{channel}}/core/iter/traits/iterator/trait.Iterator.html\" title=\"trait core::iter::traits::iterator::Iterator\"&gt;Iterator&lt;/a&gt;&amp;gt;::&lt;a class=\"associatedtype\" href=\"{{channel}}/core/iter/traits/iterator/trait.Iterator.html#associatedtype.Item\" title=\"type core::iter::traits::iterator::Iterator::Item\"&gt;Item&lt;/a&gt;;&lt;/div&gt;","Cloned&lt;Self&gt;":"&lt;h3&gt;Notable traits for &lt;code&gt;&lt;a class=\"struct\" href=\"{{channel}}/core/iter/adapters/cloned/struct.Cloned.html\" title=\"struct core::iter::adapters::cloned::Cloned\"&gt;Cloned&lt;/a&gt;&amp;lt;I&amp;gt;&lt;/code&gt;&lt;/h3&gt;&lt;pre&gt;&lt;code&gt;&lt;div class=\"where\"&gt;impl&amp;lt;'a, I, T&amp;gt; &lt;a class=\"trait\" href=\"{{channel}}/core/iter/traits/iterator/trait.Iterator.html\" title=\"trait core::iter::traits::iterator::Iterator\"&gt;Iterator&lt;/a&gt; for &lt;a class=\"struct\" href=\"{{channel}}/core/iter/adapters/cloned/struct.Cloned.html\" title=\"struct core::iter::adapters::cloned::Cloned\"&gt;Cloned&lt;/a&gt;&amp;lt;I&amp;gt;&lt;div class=\"where\"&gt;where\n T: 'a + &lt;a class=\"trait\" href=\"{{channel}}/core/clone/trait.Clone.html\" title=\"trait core::clone::Clone\"&gt;Clone&lt;/a&gt;,\n I: &lt;a class=\"trait\" href=\"{{channel}}/core/iter/traits/iterator/trait.Iterator.html\" title=\"trait core::iter::traits::iterator::Iterator\"&gt;Iterator&lt;/a&gt;&amp;lt;Item = &lt;a class=\"primitive\" href=\"{{channel}}/std/primitive.reference.html\"&gt;&amp;amp;'a T&lt;/a&gt;&amp;gt;,&lt;/div&gt;&lt;/div&gt;&lt;div class=\"where\"&gt; type &lt;a href=\"{{channel}}/core/iter/traits/iterator/trait.Iterator.html#associatedtype.Item\" class=\"associatedtype\"&gt;Item&lt;/a&gt; = T;&lt;/div&gt;","Copied&lt;Self&gt;":"&lt;h3&gt;Notable traits for &lt;code&gt;&lt;a class=\"struct\" href=\"{{channel}}/core/iter/adapters/copied/struct.Copied.html\" title=\"struct core::iter::adapters::copied::Copied\"&gt;Copied&lt;/a&gt;&amp;lt;I&amp;gt;&lt;/code&gt;&lt;/h3&gt;&lt;pre&gt;&lt;code&gt;&lt;div class=\"where\"&gt;impl&amp;lt;'a, I, T&amp;gt; &lt;a class=\"trait\" href=\"{{channel}}/core/iter/traits/iterator/trait.Iterator.html\" title=\"trait core::iter::traits::iterator::Iterator\"&gt;Iterator&lt;/a&gt; for &lt;a class=\"struct\" href=\"{{channel}}/core/iter/adapters/copied/struct.Copied.html\" title=\"struct core::iter::adapters::copied::Copied\"&gt;Copied&lt;/a&gt;&amp;lt;I&amp;gt;&lt;div class=\"where\"&gt;where\n T: 'a + &lt;a class=\"trait\" href=\"{{channel}}/core/marker/trait.Copy.html\" title=\"trait core::marker::Copy\"&gt;Copy&lt;/a&gt;,\n I: &lt;a class=\"trait\" href=\"{{channel}}/core/iter/traits/iterator/trait.Iterator.html\" title=\"trait core::iter::traits::iterator::Iterator\"&gt;Iterator&lt;/a&gt;&amp;lt;Item = &lt;a class=\"primitive\" href=\"{{channel}}/std/primitive.reference.html\"&gt;&amp;amp;'a T&lt;/a&gt;&amp;gt;,&lt;/div&gt;&lt;/div&gt;&lt;div class=\"where\"&gt; type &lt;a href=\"{{channel}}/core/iter/traits/iterator/trait.Iterator.html#associatedtype.Item\" class=\"associatedtype\"&gt;Item&lt;/a&gt; = T;&lt;/div&gt;","Enumerate&lt;Self&gt;":"&lt;h3&gt;Notable traits for &lt;code&gt;&lt;a class=\"struct\" href=\"{{channel}}/core/iter/adapters/enumerate/struct.Enumerate.html\" title=\"struct core::iter::adapters::enumerate::Enumerate\"&gt;Enumerate&lt;/a&gt;&amp;lt;I&amp;gt;&lt;/code&gt;&lt;/h3&gt;&lt;pre&gt;&lt;code&gt;&lt;div class=\"where\"&gt;impl&amp;lt;I&amp;gt; &lt;a class=\"trait\" href=\"{{channel}}/core/iter/traits/iterator/trait.Iterator.html\" title=\"trait core::iter::traits::iterator::Iterator\"&gt;Iterator&lt;/a&gt; for &lt;a class=\"struct\" href=\"{{channel}}/core/iter/adapters/enumerate/struct.Enumerate.html\" title=\"struct core::iter::adapters::enumerate::Enumerate\"&gt;Enumerate&lt;/a&gt;&amp;lt;I&amp;gt;&lt;div class=\"where\"&gt;where\n I: &lt;a class=\"trait\" href=\"{{channel}}/core/iter/traits/iterator/trait.Iterator.html\" title=\"trait core::iter::traits::iterator::Iterator\"&gt;Iterator&lt;/a&gt;,&lt;/div&gt;&lt;/div&gt;&lt;div class=\"where\"&gt; type &lt;a href=\"{{channel}}/core/iter/traits/iterator/trait.Iterator.html#associatedtype.Item\" class=\"associatedtype\"&gt;Item&lt;/a&gt; = (&lt;a class=\"primitive\" href=\"{{channel}}/std/primitive.usize.html\"&gt;usize&lt;/a&gt;, &amp;lt;I as &lt;a class=\"trait\" href=\"{{channel}}/core/iter/traits/iterator/trait.Iterator.html\" title=\"trait core::iter::traits::iterator::Iterator\"&gt;Iterator&lt;/a&gt;&amp;gt;::&lt;a class=\"associatedtype\" href=\"{{channel}}/core/iter/traits/iterator/trait.Iterator.html#associatedtype.Item\" title=\"type core::iter::traits::iterator::Iterator::Item\"&gt;Item&lt;/a&gt;);&lt;/div&gt;","Filter&lt;Self, P&gt;":"&lt;h3&gt;Notable traits for &lt;code&gt;&lt;a class=\"struct\" href=\"{{channel}}/core/iter/adapters/filter/struct.Filter.html\" title=\"struct core::iter::adapters::filter::Filter\"&gt;Filter&lt;/a&gt;&amp;lt;I, P&amp;gt;&lt;/code&gt;&lt;/h3&gt;&lt;pre&gt;&lt;code&gt;&lt;div class=\"where\"&gt;impl&amp;lt;I, P&amp;gt; &lt;a class=\"trait\" href=\"{{channel}}/core/iter/traits/iterator/trait.Iterator.html\" title=\"trait core::iter::traits::iterator::Iterator\"&gt;Iterator&lt;/a&gt; for &lt;a class=\"struct\" href=\"{{channel}}/core/iter/adapters/filter/struct.Filter.html\" title=\"struct core::iter::adapters::filter::Filter\"&gt;Filter&lt;/a&gt;&amp;lt;I, P&amp;gt;&lt;div class=\"where\"&gt;where\n I: &lt;a class=\"trait\" href=\"{{channel}}/core/iter/traits/iterator/trait.Iterator.html\" title=\"trait core::iter::traits::iterator::Iterator\"&gt;Iterator&lt;/a&gt;,\n P: &lt;a class=\"trait\" href=\"{{channel}}/core/ops/function/trait.FnMut.html\" title=\"trait core::ops::function::FnMut\"&gt;FnMut&lt;/a&gt;(&amp;amp;&amp;lt;I as &lt;a class=\"trait\" href=\"{{channel}}/core/iter/traits/iterator/trait.Iterator.html\" title=\"trait core::iter::traits::iterator::Iterator\"&gt;Iterator&lt;/a&gt;&amp;gt;::&lt;a class=\"associatedtype\" href=\"{{channel}}/core/iter/traits/iterator/trait.Iterator.html#associatedtype.Item\" title=\"type core::iter::traits::iterator::Iterator::Item\"&gt;Item&lt;/a&gt;) -&amp;gt; &lt;a class=\"primitive\" href=\"{{channel}}/std/primitive.bool.html\"&gt;bool&lt;/a&gt;,&lt;/div&gt;&lt;/div&gt;&lt;div class=\"where\"&gt; type &lt;a href=\"{{channel}}/core/iter/traits/iterator/trait.Iterator.html#associatedtype.Item\" class=\"associatedtype\"&gt;Item&lt;/a&gt; = &amp;lt;I as &lt;a class=\"trait\" href=\"{{channel}}/core/iter/traits/iterator/trait.Iterator.html\" title=\"trait core::iter::traits::iterator::Iterator\"&gt;Iterator&lt;/a&gt;&amp;gt;::&lt;a class=\"associatedtype\" href=\"{{channel}}/core/iter/traits/iterator/trait.Iterator.html#associatedtype.Item\" title=\"type core::iter::traits::iterator::Iterator::Item\"&gt;Item&lt;/a&gt;;&lt;/div&gt;","FilterMap&lt;Self, F&gt;":"&lt;h3&gt;Notable traits for &lt;code&gt;&lt;a class=\"struct\" href=\"{{channel}}/core/iter/adapters/filter_map/struct.FilterMap.html\" title=\"struct core::iter::adapters::filter_map::FilterMap\"&gt;FilterMap&lt;/a&gt;&amp;lt;I, F&amp;gt;&lt;/code&gt;&lt;/h3&gt;&lt;pre&gt;&lt;code&gt;&lt;div class=\"where\"&gt;impl&amp;lt;B, I, F&amp;gt; &lt;a class=\"trait\" href=\"{{channel}}/core/iter/traits/iterator/trait.Iterator.html\" title=\"trait core::iter::traits::iterator::Iterator\"&gt;Iterator&lt;/a&gt; for &lt;a class=\"struct\" href=\"{{channel}}/core/iter/adapters/filter_map/struct.FilterMap.html\" title=\"struct core::iter::adapters::filter_map::FilterMap\"&gt;FilterMap&lt;/a&gt;&amp;lt;I, F&amp;gt;&lt;div class=\"where\"&gt;where\n I: &lt;a class=\"trait\" href=\"{{channel}}/core/iter/traits/iterator/trait.Iterator.html\" title=\"trait core::iter::traits::iterator::Iterator\"&gt;Iterator&lt;/a&gt;,\n F: &lt;a class=\"trait\" href=\"{{channel}}/core/ops/function/trait.FnMut.html\" title=\"trait core::ops::function::FnMut\"&gt;FnMut&lt;/a&gt;(&amp;lt;I as &lt;a class=\"trait\" href=\"{{channel}}/core/iter/traits/iterator/trait.Iterator.html\" title=\"trait core::iter::traits::iterator::Iterator\"&gt;Iterator&lt;/a&gt;&amp;gt;::&lt;a class=\"associatedtype\" href=\"{{channel}}/core/iter/traits/iterator/trait.Iterator.html#associatedtype.Item\" title=\"type core::iter::traits::iterator::Iterator::Item\"&gt;Item&lt;/a&gt;) -&amp;gt; &lt;a class=\"enum\" href=\"{{channel}}/core/option/enum.Option.html\" title=\"enum core::option::Option\"&gt;Option&lt;/a&gt;&amp;lt;B&amp;gt;,&lt;/div&gt;&lt;/div&gt;&lt;div class=\"where\"&gt; type &lt;a href=\"{{channel}}/core/iter/traits/iterator/trait.Iterator.html#associatedtype.Item\" class=\"associatedtype\"&gt;Item&lt;/a&gt; = B;&lt;/div&gt;","FlatMap&lt;Self, U, F&gt;":"&lt;h3&gt;Notable traits for &lt;code&gt;&lt;a class=\"struct\" href=\"{{channel}}/core/iter/adapters/flatten/struct.FlatMap.html\" title=\"struct core::iter::adapters::flatten::FlatMap\"&gt;FlatMap&lt;/a&gt;&amp;lt;I, U, F&amp;gt;&lt;/code&gt;&lt;/h3&gt;&lt;pre&gt;&lt;code&gt;&lt;div class=\"where\"&gt;impl&amp;lt;I, U, F&amp;gt; &lt;a class=\"trait\" href=\"{{channel}}/core/iter/traits/iterator/trait.Iterator.html\" title=\"trait core::iter::traits::iterator::Iterator\"&gt;Iterator&lt;/a&gt; for &lt;a class=\"struct\" href=\"{{channel}}/core/iter/adapters/flatten/struct.FlatMap.html\" title=\"struct core::iter::adapters::flatten::FlatMap\"&gt;FlatMap&lt;/a&gt;&amp;lt;I, U, F&amp;gt;&lt;div class=\"where\"&gt;where\n I: &lt;a class=\"trait\" href=\"{{channel}}/core/iter/traits/iterator/trait.Iterator.html\" title=\"trait core::iter::traits::iterator::Iterator\"&gt;Iterator&lt;/a&gt;,\n U: &lt;a class=\"trait\" href=\"{{channel}}/core/iter/traits/collect/trait.IntoIterator.html\" title=\"trait core::iter::traits::collect::IntoIterator\"&gt;IntoIterator&lt;/a&gt;,\n F: &lt;a class=\"trait\" href=\"{{channel}}/core/ops/function/trait.FnMut.html\" title=\"trait core::ops::function::FnMut\"&gt;FnMut&lt;/a&gt;(&amp;lt;I as &lt;a class=\"trait\" href=\"{{channel}}/core/iter/traits/iterator/trait.Iterator.html\" title=\"trait core::iter::traits::iterator::Iterator\"&gt;Iterator&lt;/a&gt;&amp;gt;::&lt;a class=\"associatedtype\" href=\"{{channel}}/core/iter/traits/iterator/trait.Iterator.html#associatedtype.Item\" title=\"type core::iter::traits::iterator::Iterator::Item\"&gt;Item&lt;/a&gt;) -&amp;gt; U,&lt;/div&gt;&lt;/div&gt;&lt;div class=\"where\"&gt; type &lt;a href=\"{{channel}}/core/iter/traits/iterator/trait.Iterator.html#associatedtype.Item\" class=\"associatedtype\"&gt;Item&lt;/a&gt; = &amp;lt;U as &lt;a class=\"trait\" href=\"{{channel}}/core/iter/traits/collect/trait.IntoIterator.html\" title=\"trait core::iter::traits::collect::IntoIterator\"&gt;IntoIterator&lt;/a&gt;&amp;gt;::&lt;a class=\"associatedtype\" href=\"{{channel}}/core/iter/traits/collect/trait.IntoIterator.html#associatedtype.Item\" title=\"type core::iter::traits::collect::IntoIterator::Item\"&gt;Item&lt;/a&gt;;&lt;/div&gt;","Flatten&lt;Self&gt;":"&lt;h3&gt;Notable traits for &lt;code&gt;&lt;a class=\"struct\" href=\"{{channel}}/core/iter/adapters/flatten/struct.Flatten.html\" title=\"struct core::iter::adapters::flatten::Flatten\"&gt;Flatten&lt;/a&gt;&amp;lt;I&amp;gt;&lt;/code&gt;&lt;/h3&gt;&lt;pre&gt;&lt;code&gt;&lt;div class=\"where\"&gt;impl&amp;lt;I, U&amp;gt; &lt;a class=\"trait\" href=\"{{channel}}/core/iter/traits/iterator/trait.Iterator.html\" title=\"trait core::iter::traits::iterator::Iterator\"&gt;Iterator&lt;/a&gt; for &lt;a class=\"struct\" href=\"{{channel}}/core/iter/adapters/flatten/struct.Flatten.html\" title=\"struct core::iter::adapters::flatten::Flatten\"&gt;Flatten&lt;/a&gt;&amp;lt;I&amp;gt;&lt;div class=\"where\"&gt;where\n I: &lt;a class=\"trait\" href=\"{{channel}}/core/iter/traits/iterator/trait.Iterator.html\" title=\"trait core::iter::traits::iterator::Iterator\"&gt;Iterator&lt;/a&gt;,\n &amp;lt;I as &lt;a class=\"trait\" href=\"{{channel}}/core/iter/traits/iterator/trait.Iterator.html\" title=\"trait core::iter::traits::iterator::Iterator\"&gt;Iterator&lt;/a&gt;&amp;gt;::&lt;a class=\"associatedtype\" href=\"{{channel}}/core/iter/traits/iterator/trait.Iterator.html#associatedtype.Item\" title=\"type core::iter::traits::iterator::Iterator::Item\"&gt;Item&lt;/a&gt;: &lt;a class=\"trait\" href=\"{{channel}}/core/iter/traits/collect/trait.IntoIterator.html\" title=\"trait core::iter::traits::collect::IntoIterator\"&gt;IntoIterator&lt;/a&gt;&amp;lt;IntoIter = U, Item = &amp;lt;U as &lt;a class=\"trait\" href=\"{{channel}}/core/iter/traits/iterator/trait.Iterator.html\" title=\"trait core::iter::traits::iterator::Iterator\"&gt;Iterator&lt;/a&gt;&amp;gt;::&lt;a class=\"associatedtype\" href=\"{{channel}}/core/iter/traits/iterator/trait.Iterator.html#associatedtype.Item\" title=\"type core::iter::traits::iterator::Iterator::Item\"&gt;Item&lt;/a&gt;&amp;gt;,\n U: &lt;a class=\"trait\" href=\"{{channel}}/core/iter/traits/iterator/trait.Iterator.html\" title=\"trait core::iter::traits::iterator::Iterator\"&gt;Iterator&lt;/a&gt;,&lt;/div&gt;&lt;/div&gt;&lt;div class=\"where\"&gt; type &lt;a href=\"{{channel}}/core/iter/traits/iterator/trait.Iterator.html#associatedtype.Item\" class=\"associatedtype\"&gt;Item&lt;/a&gt; = &amp;lt;U as &lt;a class=\"trait\" href=\"{{channel}}/core/iter/traits/iterator/trait.Iterator.html\" title=\"trait core::iter::traits::iterator::Iterator\"&gt;Iterator&lt;/a&gt;&amp;gt;::&lt;a class=\"associatedtype\" href=\"{{channel}}/core/iter/traits/iterator/trait.Iterator.html#associatedtype.Item\" title=\"type core::iter::traits::iterator::Iterator::Item\"&gt;Item&lt;/a&gt;;&lt;/div&gt;","Fuse&lt;Self&gt;":"&lt;h3&gt;Notable traits for &lt;code&gt;&lt;a class=\"struct\" href=\"{{channel}}/core/iter/adapters/fuse/struct.Fuse.html\" title=\"struct core::iter::adapters::fuse::Fuse\"&gt;Fuse&lt;/a&gt;&amp;lt;I&amp;gt;&lt;/code&gt;&lt;/h3&gt;&lt;pre&gt;&lt;code&gt;&lt;div class=\"where\"&gt;impl&amp;lt;I&amp;gt; &lt;a class=\"trait\" href=\"{{channel}}/core/iter/traits/iterator/trait.Iterator.html\" title=\"trait core::iter::traits::iterator::Iterator\"&gt;Iterator&lt;/a&gt; for &lt;a class=\"struct\" href=\"{{channel}}/core/iter/adapters/fuse/struct.Fuse.html\" title=\"struct core::iter::adapters::fuse::Fuse\"&gt;Fuse&lt;/a&gt;&amp;lt;I&amp;gt;&lt;div class=\"where\"&gt;where\n I: &lt;a class=\"trait\" href=\"{{channel}}/core/iter/traits/iterator/trait.Iterator.html\" title=\"trait core::iter::traits::iterator::Iterator\"&gt;Iterator&lt;/a&gt;,&lt;/div&gt;&lt;/div&gt;&lt;div class=\"where\"&gt; type &lt;a href=\"{{channel}}/core/iter/traits/iterator/trait.Iterator.html#associatedtype.Item\" class=\"associatedtype\"&gt;Item&lt;/a&gt; = &amp;lt;I as &lt;a class=\"trait\" href=\"{{channel}}/core/iter/traits/iterator/trait.Iterator.html\" title=\"trait core::iter::traits::iterator::Iterator\"&gt;Iterator&lt;/a&gt;&amp;gt;::&lt;a class=\"associatedtype\" href=\"{{channel}}/core/iter/traits/iterator/trait.Iterator.html#associatedtype.Item\" title=\"type core::iter::traits::iterator::Iterator::Item\"&gt;Item&lt;/a&gt;;&lt;/div&gt;","Inspect&lt;Self, F&gt;":"&lt;h3&gt;Notable traits for &lt;code&gt;&lt;a class=\"struct\" href=\"{{channel}}/core/iter/adapters/inspect/struct.Inspect.html\" title=\"struct core::iter::adapters::inspect::Inspect\"&gt;Inspect&lt;/a&gt;&amp;lt;I, F&amp;gt;&lt;/code&gt;&lt;/h3&gt;&lt;pre&gt;&lt;code&gt;&lt;div class=\"where\"&gt;impl&amp;lt;I, F&amp;gt; &lt;a class=\"trait\" href=\"{{channel}}/core/iter/traits/iterator/trait.Iterator.html\" title=\"trait core::iter::traits::iterator::Iterator\"&gt;Iterator&lt;/a&gt; for &lt;a class=\"struct\" href=\"{{channel}}/core/iter/adapters/inspect/struct.Inspect.html\" title=\"struct core::iter::adapters::inspect::Inspect\"&gt;Inspect&lt;/a&gt;&amp;lt;I, F&amp;gt;&lt;div class=\"where\"&gt;where\n I: &lt;a class=\"trait\" href=\"{{channel}}/core/iter/traits/iterator/trait.Iterator.html\" title=\"trait core::iter::traits::iterator::Iterator\"&gt;Iterator&lt;/a&gt;,\n F: &lt;a class=\"trait\" href=\"{{channel}}/core/ops/function/trait.FnMut.html\" title=\"trait core::ops::function::FnMut\"&gt;FnMut&lt;/a&gt;(&amp;amp;&amp;lt;I as &lt;a class=\"trait\" href=\"{{channel}}/core/iter/traits/iterator/trait.Iterator.html\" title=\"trait core::iter::traits::iterator::Iterator\"&gt;Iterator&lt;/a&gt;&amp;gt;::&lt;a class=\"associatedtype\" href=\"{{channel}}/core/iter/traits/iterator/trait.Iterator.html#associatedtype.Item\" title=\"type core::iter::traits::iterator::Iterator::Item\"&gt;Item&lt;/a&gt;),&lt;/div&gt;&lt;/div&gt;&lt;div class=\"where\"&gt; type &lt;a href=\"{{channel}}/core/iter/traits/iterator/trait.Iterator.html#associatedtype.Item\" class=\"associatedtype\"&gt;Item&lt;/a&gt; = &amp;lt;I as &lt;a class=\"trait\" href=\"{{channel}}/core/iter/traits/iterator/trait.Iterator.html\" title=\"trait core::iter::traits::iterator::Iterator\"&gt;Iterator&lt;/a&gt;&amp;gt;::&lt;a class=\"associatedtype\" href=\"{{channel}}/core/iter/traits/iterator/trait.Iterator.html#associatedtype.Item\" title=\"type core::iter::traits::iterator::Iterator::Item\"&gt;Item&lt;/a&gt;;&lt;/div&gt;","Intersperse&lt;Self&gt;":"&lt;h3&gt;Notable traits for &lt;code&gt;&lt;a class=\"struct\" href=\"{{channel}}/core/iter/adapters/intersperse/struct.Intersperse.html\" title=\"struct core::iter::adapters::intersperse::Intersperse\"&gt;Intersperse&lt;/a&gt;&amp;lt;I&amp;gt;&lt;/code&gt;&lt;/h3&gt;&lt;pre&gt;&lt;code&gt;&lt;div class=\"where\"&gt;impl&amp;lt;I&amp;gt; &lt;a class=\"trait\" href=\"{{channel}}/core/iter/traits/iterator/trait.Iterator.html\" title=\"trait core::iter::traits::iterator::Iterator\"&gt;Iterator&lt;/a&gt; for &lt;a class=\"struct\" href=\"{{channel}}/core/iter/adapters/intersperse/struct.Intersperse.html\" title=\"struct core::iter::adapters::intersperse::Intersperse\"&gt;Intersperse&lt;/a&gt;&amp;lt;I&amp;gt;&lt;div class=\"where\"&gt;where\n I: &lt;a class=\"trait\" href=\"{{channel}}/core/iter/traits/iterator/trait.Iterator.html\" title=\"trait core::iter::traits::iterator::Iterator\"&gt;Iterator&lt;/a&gt;,\n &amp;lt;I as &lt;a class=\"trait\" href=\"{{channel}}/core/iter/traits/iterator/trait.Iterator.html\" title=\"trait core::iter::traits::iterator::Iterator\"&gt;Iterator&lt;/a&gt;&amp;gt;::&lt;a class=\"associatedtype\" href=\"{{channel}}/core/iter/traits/iterator/trait.Iterator.html#associatedtype.Item\" title=\"type core::iter::traits::iterator::Iterator::Item\"&gt;Item&lt;/a&gt;: &lt;a class=\"trait\" href=\"{{channel}}/core/clone/trait.Clone.html\" title=\"trait core::clone::Clone\"&gt;Clone&lt;/a&gt;,&lt;/div&gt;&lt;/div&gt;&lt;div class=\"where\"&gt; type &lt;a href=\"{{channel}}/core/iter/traits/iterator/trait.Iterator.html#associatedtype.Item\" class=\"associatedtype\"&gt;Item&lt;/a&gt; = &amp;lt;I as &lt;a class=\"trait\" href=\"{{channel}}/core/iter/traits/iterator/trait.Iterator.html\" title=\"trait core::iter::traits::iterator::Iterator\"&gt;Iterator&lt;/a&gt;&amp;gt;::&lt;a class=\"associatedtype\" href=\"{{channel}}/core/iter/traits/iterator/trait.Iterator.html#associatedtype.Item\" title=\"type core::iter::traits::iterator::Iterator::Item\"&gt;Item&lt;/a&gt;;&lt;/div&gt;","IntersperseWith&lt;Self, G&gt;":"&lt;h3&gt;Notable traits for &lt;code&gt;&lt;a class=\"struct\" href=\"{{channel}}/core/iter/adapters/intersperse/struct.IntersperseWith.html\" title=\"struct core::iter::adapters::intersperse::IntersperseWith\"&gt;IntersperseWith&lt;/a&gt;&amp;lt;I, G&amp;gt;&lt;/code&gt;&lt;/h3&gt;&lt;pre&gt;&lt;code&gt;&lt;div class=\"where\"&gt;impl&amp;lt;I, G&amp;gt; &lt;a class=\"trait\" href=\"{{channel}}/core/iter/traits/iterator/trait.Iterator.html\" title=\"trait core::iter::traits::iterator::Iterator\"&gt;Iterator&lt;/a&gt; for &lt;a class=\"struct\" href=\"{{channel}}/core/iter/adapters/intersperse/struct.IntersperseWith.html\" title=\"struct core::iter::adapters::intersperse::IntersperseWith\"&gt;IntersperseWith&lt;/a&gt;&amp;lt;I, G&amp;gt;&lt;div class=\"where\"&gt;where\n I: &lt;a class=\"trait\" href=\"{{channel}}/core/iter/traits/iterator/trait.Iterator.html\" title=\"trait core::iter::traits::iterator::Iterator\"&gt;Iterator&lt;/a&gt;,\n G: &lt;a class=\"trait\" href=\"{{channel}}/core/ops/function/trait.FnMut.html\" title=\"trait core::ops::function::FnMut\"&gt;FnMut&lt;/a&gt;() -&amp;gt; &amp;lt;I as &lt;a class=\"trait\" href=\"{{channel}}/core/iter/traits/iterator/trait.Iterator.html\" title=\"trait core::iter::traits::iterator::Iterator\"&gt;Iterator&lt;/a&gt;&amp;gt;::&lt;a class=\"associatedtype\" href=\"{{channel}}/core/iter/traits/iterator/trait.Iterator.html#associatedtype.Item\" title=\"type core::iter::traits::iterator::Iterator::Item\"&gt;Item&lt;/a&gt;,&lt;/div&gt;&lt;/div&gt;&lt;div class=\"where\"&gt; type &lt;a href=\"{{channel}}/core/iter/traits/iterator/trait.Iterator.html#associatedtype.Item\" class=\"associatedtype\"&gt;Item&lt;/a&gt; = &amp;lt;I as &lt;a class=\"trait\" href=\"{{channel}}/core/iter/traits/iterator/trait.Iterator.html\" title=\"trait core::iter::traits::iterator::Iterator\"&gt;Iterator&lt;/a&gt;&amp;gt;::&lt;a class=\"associatedtype\" href=\"{{channel}}/core/iter/traits/iterator/trait.Iterator.html#associatedtype.Item\" title=\"type core::iter::traits::iterator::Iterator::Item\"&gt;Item&lt;/a&gt;;&lt;/div&gt;","Map&lt;Self, F&gt;":"&lt;h3&gt;Notable traits for &lt;code&gt;&lt;a class=\"struct\" href=\"{{channel}}/core/iter/adapters/map/struct.Map.html\" title=\"struct core::iter::adapters::map::Map\"&gt;Map&lt;/a&gt;&amp;lt;I, F&amp;gt;&lt;/code&gt;&lt;/h3&gt;&lt;pre&gt;&lt;code&gt;&lt;div class=\"where\"&gt;impl&amp;lt;B, I, F&amp;gt; &lt;a class=\"trait\" href=\"{{channel}}/core/iter/traits/iterator/trait.Iterator.html\" title=\"trait core::iter::traits::iterator::Iterator\"&gt;Iterator&lt;/a&gt; for &lt;a class=\"struct\" href=\"{{channel}}/core/iter/adapters/map/struct.Map.html\" title=\"struct core::iter::adapters::map::Map\"&gt;Map&lt;/a&gt;&amp;lt;I, F&amp;gt;&lt;div class=\"where\"&gt;where\n I: &lt;a class=\"trait\" href=\"{{channel}}/core/iter/traits/iterator/trait.Iterator.html\" title=\"trait core::iter::traits::iterator::Iterator\"&gt;Iterator&lt;/a&gt;,\n F: &lt;a class=\"trait\" href=\"{{channel}}/core/ops/function/trait.FnMut.html\" title=\"trait core::ops::function::FnMut\"&gt;FnMut&lt;/a&gt;(&amp;lt;I as &lt;a class=\"trait\" href=\"{{channel}}/core/iter/traits/iterator/trait.Iterator.html\" title=\"trait core::iter::traits::iterator::Iterator\"&gt;Iterator&lt;/a&gt;&amp;gt;::&lt;a class=\"associatedtype\" href=\"{{channel}}/core/iter/traits/iterator/trait.Iterator.html#associatedtype.Item\" title=\"type core::iter::traits::iterator::Iterator::Item\"&gt;Item&lt;/a&gt;) -&amp;gt; B,&lt;/div&gt;&lt;/div&gt;&lt;div class=\"where\"&gt; type &lt;a href=\"{{channel}}/core/iter/traits/iterator/trait.Iterator.html#associatedtype.Item\" class=\"associatedtype\"&gt;Item&lt;/a&gt; = B;&lt;/div&gt;","MapWhile&lt;Self, P&gt;":"&lt;h3&gt;Notable traits for &lt;code&gt;&lt;a class=\"struct\" href=\"{{channel}}/core/iter/adapters/map_while/struct.MapWhile.html\" title=\"struct core::iter::adapters::map_while::MapWhile\"&gt;MapWhile&lt;/a&gt;&amp;lt;I, P&amp;gt;&lt;/code&gt;&lt;/h3&gt;&lt;pre&gt;&lt;code&gt;&lt;div class=\"where\"&gt;impl&amp;lt;B, I, P&amp;gt; &lt;a class=\"trait\" href=\"{{channel}}/core/iter/traits/iterator/trait.Iterator.html\" title=\"trait core::iter::traits::iterator::Iterator\"&gt;Iterator&lt;/a&gt; for &lt;a class=\"struct\" href=\"{{channel}}/core/iter/adapters/map_while/struct.MapWhile.html\" title=\"struct core::iter::adapters::map_while::MapWhile\"&gt;MapWhile&lt;/a&gt;&amp;lt;I, P&amp;gt;&lt;div class=\"where\"&gt;where\n I: &lt;a class=\"trait\" href=\"{{channel}}/core/iter/traits/iterator/trait.Iterator.html\" title=\"trait core::iter::traits::iterator::Iterator\"&gt;Iterator&lt;/a&gt;,\n P: &lt;a class=\"trait\" href=\"{{channel}}/core/ops/function/trait.FnMut.html\" title=\"trait core::ops::function::FnMut\"&gt;FnMut&lt;/a&gt;(&amp;lt;I as &lt;a class=\"trait\" href=\"{{channel}}/core/iter/traits/iterator/trait.Iterator.html\" title=\"trait core::iter::traits::iterator::Iterator\"&gt;Iterator&lt;/a&gt;&amp;gt;::&lt;a class=\"associatedtype\" href=\"{{channel}}/core/iter/traits/iterator/trait.Iterator.html#associatedtype.Item\" title=\"type core::iter::traits::iterator::Iterator::Item\"&gt;Item&lt;/a&gt;) -&amp;gt; &lt;a class=\"enum\" href=\"{{channel}}/core/option/enum.Option.html\" title=\"enum core::option::Option\"&gt;Option&lt;/a&gt;&amp;lt;B&amp;gt;,&lt;/div&gt;&lt;/div&gt;&lt;div class=\"where\"&gt; type &lt;a href=\"{{channel}}/core/iter/traits/iterator/trait.Iterator.html#associatedtype.Item\" class=\"associatedtype\"&gt;Item&lt;/a&gt; = B;&lt;/div&gt;","MapWindows&lt;Self, F, N&gt;":"&lt;h3&gt;Notable traits for &lt;code&gt;&lt;a class=\"struct\" href=\"{{channel}}/core/iter/adapters/map_windows/struct.MapWindows.html\" title=\"struct core::iter::adapters::map_windows::MapWindows\"&gt;MapWindows&lt;/a&gt;&amp;lt;I, F, N&amp;gt;&lt;/code&gt;&lt;/h3&gt;&lt;pre&gt;&lt;code&gt;&lt;div class=\"where\"&gt;impl&amp;lt;I, F, R, const N: &lt;a class=\"primitive\" href=\"{{channel}}/std/primitive.usize.html\"&gt;usize&lt;/a&gt;&amp;gt; &lt;a class=\"trait\" href=\"{{channel}}/core/iter/traits/iterator/trait.Iterator.html\" title=\"trait core::iter::traits::iterator::Iterator\"&gt;Iterator&lt;/a&gt; for &lt;a class=\"struct\" href=\"{{channel}}/core/iter/adapters/map_windows/struct.MapWindows.html\" title=\"struct core::iter::adapters::map_windows::MapWindows\"&gt;MapWindows&lt;/a&gt;&amp;lt;I, F, N&amp;gt;&lt;div class=\"where\"&gt;where\n I: &lt;a class=\"trait\" href=\"{{channel}}/core/iter/traits/iterator/trait.Iterator.html\" title=\"trait core::iter::traits::iterator::Iterator\"&gt;Iterator&lt;/a&gt;,\n F: &lt;a class=\"trait\" href=\"{{channel}}/core/ops/function/trait.FnMut.html\" title=\"trait core::ops::function::FnMut\"&gt;FnMut&lt;/a&gt;(&amp;amp;[&amp;lt;I as &lt;a class=\"trait\" href=\"{{channel}}/core/iter/traits/iterator/trait.Iterator.html\" title=\"trait core::iter::traits::iterator::Iterator\"&gt;Iterator&lt;/a&gt;&amp;gt;::&lt;a class=\"associatedtype\" href=\"{{channel}}/core/iter/traits/iterator/trait.Iterator.html#associatedtype.Item\" title=\"type core::iter::traits::iterator::Iterator::Item\"&gt;Item&lt;/a&gt;; &lt;a class=\"primitive\" href=\"{{channel}}/std/primitive.array.html\"&gt;N&lt;/a&gt;]) -&amp;gt; R,&lt;/div&gt;&lt;/div&gt;&lt;div class=\"where\"&gt; type &lt;a href=\"{{channel}}/core/iter/traits/iterator/trait.Iterator.html#associatedtype.Item\" class=\"associatedtype\"&gt;Item&lt;/a&gt; = R;&lt;/div&gt;","Odd":"&lt;h3&gt;Notable traits for &lt;code&gt;&lt;a class=\"struct\" href=\"struct.Odd.html\" title=\"struct foo::Odd\"&gt;Odd&lt;/a&gt;&lt;/code&gt;&lt;/h3&gt;&lt;pre&gt;&lt;code&gt;&lt;div class=\"where\"&gt;impl &lt;a class=\"trait\" href=\"{{channel}}/core/iter/traits/iterator/trait.Iterator.html\" title=\"trait core::iter::traits::iterator::Iterator\"&gt;Iterator&lt;/a&gt; for &lt;a class=\"struct\" href=\"struct.Odd.html\" title=\"struct foo::Odd\"&gt;Odd&lt;/a&gt;&lt;/div&gt;&lt;div class=\"where\"&gt; type &lt;a href=\"{{channel}}/core/iter/traits/iterator/trait.Iterator.html#associatedtype.Item\" class=\"associatedtype\"&gt;Item&lt;/a&gt; = &lt;a class=\"primitive\" href=\"{{channel}}/std/primitive.usize.html\"&gt;usize&lt;/a&gt;;&lt;/div&gt;","Peekable&lt;Self&gt;":"&lt;h3&gt;Notable traits for &lt;code&gt;&lt;a class=\"struct\" href=\"{{channel}}/core/iter/adapters/peekable/struct.Peekable.html\" title=\"struct core::iter::adapters::peekable::Peekable\"&gt;Peekable&lt;/a&gt;&amp;lt;I&amp;gt;&lt;/code&gt;&lt;/h3&gt;&lt;pre&gt;&lt;code&gt;&lt;div class=\"where\"&gt;impl&amp;lt;I&amp;gt; &lt;a class=\"trait\" href=\"{{channel}}/core/iter/traits/iterator/trait.Iterator.html\" title=\"trait core::iter::traits::iterator::Iterator\"&gt;Iterator&lt;/a&gt; for &lt;a class=\"struct\" href=\"{{channel}}/core/iter/adapters/peekable/struct.Peekable.html\" title=\"struct core::iter::adapters::peekable::Peekable\"&gt;Peekable&lt;/a&gt;&amp;lt;I&amp;gt;&lt;div class=\"where\"&gt;where\n I: &lt;a class=\"trait\" href=\"{{channel}}/core/iter/traits/iterator/trait.Iterator.html\" title=\"trait core::iter::traits::iterator::Iterator\"&gt;Iterator&lt;/a&gt;,&lt;/div&gt;&lt;/div&gt;&lt;div class=\"where\"&gt; type &lt;a href=\"{{channel}}/core/iter/traits/iterator/trait.Iterator.html#associatedtype.Item\" class=\"associatedtype\"&gt;Item&lt;/a&gt; = &amp;lt;I as &lt;a class=\"trait\" href=\"{{channel}}/core/iter/traits/iterator/trait.Iterator.html\" title=\"trait core::iter::traits::iterator::Iterator\"&gt;Iterator&lt;/a&gt;&amp;gt;::&lt;a class=\"associatedtype\" href=\"{{channel}}/core/iter/traits/iterator/trait.Iterator.html#associatedtype.Item\" title=\"type core::iter::traits::iterator::Iterator::Item\"&gt;Item&lt;/a&gt;;&lt;/div&gt;","Scan&lt;Self, St, F&gt;":"&lt;h3&gt;Notable traits for &lt;code&gt;&lt;a class=\"struct\" href=\"{{channel}}/core/iter/adapters/scan/struct.Scan.html\" title=\"struct core::iter::adapters::scan::Scan\"&gt;Scan&lt;/a&gt;&amp;lt;I, St, F&amp;gt;&lt;/code&gt;&lt;/h3&gt;&lt;pre&gt;&lt;code&gt;&lt;div class=\"where\"&gt;impl&amp;lt;B, I, St, F&amp;gt; &lt;a class=\"trait\" href=\"{{channel}}/core/iter/traits/iterator/trait.Iterator.html\" title=\"trait core::iter::traits::iterator::Iterator\"&gt;Iterator&lt;/a&gt; for &lt;a class=\"struct\" href=\"{{channel}}/core/iter/adapters/scan/struct.Scan.html\" title=\"struct core::iter::adapters::scan::Scan\"&gt;Scan&lt;/a&gt;&amp;lt;I, St, F&amp;gt;&lt;div class=\"where\"&gt;where\n I: &lt;a class=\"trait\" href=\"{{channel}}/core/iter/traits/iterator/trait.Iterator.html\" title=\"trait core::iter::traits::iterator::Iterator\"&gt;Iterator&lt;/a&gt;,\n F: &lt;a class=\"trait\" href=\"{{channel}}/core/ops/function/trait.FnMut.html\" title=\"trait core::ops::function::FnMut\"&gt;FnMut&lt;/a&gt;(&lt;a class=\"primitive\" href=\"{{channel}}/std/primitive.reference.html\"&gt;&amp;amp;mut St&lt;/a&gt;, &amp;lt;I as &lt;a class=\"trait\" href=\"{{channel}}/core/iter/traits/iterator/trait.Iterator.html\" title=\"trait core::iter::traits::iterator::Iterator\"&gt;Iterator&lt;/a&gt;&amp;gt;::&lt;a class=\"associatedtype\" href=\"{{channel}}/core/iter/traits/iterator/trait.Iterator.html#associatedtype.Item\" title=\"type core::iter::traits::iterator::Iterator::Item\"&gt;Item&lt;/a&gt;) -&amp;gt; &lt;a class=\"enum\" href=\"{{channel}}/core/option/enum.Option.html\" title=\"enum core::option::Option\"&gt;Option&lt;/a&gt;&amp;lt;B&amp;gt;,&lt;/div&gt;&lt;/div&gt;&lt;div class=\"where\"&gt; type &lt;a href=\"{{channel}}/core/iter/traits/iterator/trait.Iterator.html#associatedtype.Item\" class=\"associatedtype\"&gt;Item&lt;/a&gt; = B;&lt;/div&gt;","Skip&lt;Self&gt;":"&lt;h3&gt;Notable traits for &lt;code&gt;&lt;a class=\"struct\" href=\"{{channel}}/core/iter/adapters/skip/struct.Skip.html\" title=\"struct core::iter::adapters::skip::Skip\"&gt;Skip&lt;/a&gt;&amp;lt;I&amp;gt;&lt;/code&gt;&lt;/h3&gt;&lt;pre&gt;&lt;code&gt;&lt;div class=\"where\"&gt;impl&amp;lt;I&amp;gt; &lt;a class=\"trait\" href=\"{{channel}}/core/iter/traits/iterator/trait.Iterator.html\" title=\"trait core::iter::traits::iterator::Iterator\"&gt;Iterator&lt;/a&gt; for &lt;a class=\"struct\" href=\"{{channel}}/core/iter/adapters/skip/struct.Skip.html\" title=\"struct core::iter::adapters::skip::Skip\"&gt;Skip&lt;/a&gt;&amp;lt;I&amp;gt;&lt;div class=\"where\"&gt;where\n I: &lt;a class=\"trait\" href=\"{{channel}}/core/iter/traits/iterator/trait.Iterator.html\" title=\"trait core::iter::traits::iterator::Iterator\"&gt;Iterator&lt;/a&gt;,&lt;/div&gt;&lt;/div&gt;&lt;div class=\"where\"&gt; type &lt;a href=\"{{channel}}/core/iter/traits/iterator/trait.Iterator.html#associatedtype.Item\" class=\"associatedtype\"&gt;Item&lt;/a&gt; = &amp;lt;I as &lt;a class=\"trait\" href=\"{{channel}}/core/iter/traits/iterator/trait.Iterator.html\" title=\"trait core::iter::traits::iterator::Iterator\"&gt;Iterator&lt;/a&gt;&amp;gt;::&lt;a class=\"associatedtype\" href=\"{{channel}}/core/iter/traits/iterator/trait.Iterator.html#associatedtype.Item\" title=\"type core::iter::traits::iterator::Iterator::Item\"&gt;Item&lt;/a&gt;;&lt;/div&gt;","SkipWhile&lt;Self, P&gt;":"&lt;h3&gt;Notable traits for &lt;code&gt;&lt;a class=\"struct\" href=\"{{channel}}/core/iter/adapters/skip_while/struct.SkipWhile.html\" title=\"struct core::iter::adapters::skip_while::SkipWhile\"&gt;SkipWhile&lt;/a&gt;&amp;lt;I, P&amp;gt;&lt;/code&gt;&lt;/h3&gt;&lt;pre&gt;&lt;code&gt;&lt;div class=\"where\"&gt;impl&amp;lt;I, P&amp;gt; &lt;a class=\"trait\" href=\"{{channel}}/core/iter/traits/iterator/trait.Iterator.html\" title=\"trait core::iter::traits::iterator::Iterator\"&gt;Iterator&lt;/a&gt; for &lt;a class=\"struct\" href=\"{{channel}}/core/iter/adapters/skip_while/struct.SkipWhile.html\" title=\"struct core::iter::adapters::skip_while::SkipWhile\"&gt;SkipWhile&lt;/a&gt;&amp;lt;I, P&amp;gt;&lt;div class=\"where\"&gt;where\n I: &lt;a class=\"trait\" href=\"{{channel}}/core/iter/traits/iterator/trait.Iterator.html\" title=\"trait core::iter::traits::iterator::Iterator\"&gt;Iterator&lt;/a&gt;,\n P: &lt;a class=\"trait\" href=\"{{channel}}/core/ops/function/trait.FnMut.html\" title=\"trait core::ops::function::FnMut\"&gt;FnMut&lt;/a&gt;(&amp;amp;&amp;lt;I as &lt;a class=\"trait\" href=\"{{channel}}/core/iter/traits/iterator/trait.Iterator.html\" title=\"trait core::iter::traits::iterator::Iterator\"&gt;Iterator&lt;/a&gt;&amp;gt;::&lt;a class=\"associatedtype\" href=\"{{channel}}/core/iter/traits/iterator/trait.Iterator.html#associatedtype.Item\" title=\"type core::iter::traits::iterator::Iterator::Item\"&gt;Item&lt;/a&gt;) -&amp;gt; &lt;a class=\"primitive\" href=\"{{channel}}/std/primitive.bool.html\"&gt;bool&lt;/a&gt;,&lt;/div&gt;&lt;/div&gt;&lt;div class=\"where\"&gt; type &lt;a href=\"{{channel}}/core/iter/traits/iterator/trait.Iterator.html#associatedtype.Item\" class=\"associatedtype\"&gt;Item&lt;/a&gt; = &amp;lt;I as &lt;a class=\"trait\" href=\"{{channel}}/core/iter/traits/iterator/trait.Iterator.html\" title=\"trait core::iter::traits::iterator::Iterator\"&gt;Iterator&lt;/a&gt;&amp;gt;::&lt;a class=\"associatedtype\" href=\"{{channel}}/core/iter/traits/iterator/trait.Iterator.html#associatedtype.Item\" title=\"type core::iter::traits::iterator::Iterator::Item\"&gt;Item&lt;/a&gt;;&lt;/div&gt;","StepBy&lt;Self&gt;":"&lt;h3&gt;Notable traits for &lt;code&gt;&lt;a class=\"struct\" href=\"{{channel}}/core/iter/adapters/step_by/struct.StepBy.html\" title=\"struct core::iter::adapters::step_by::StepBy\"&gt;StepBy&lt;/a&gt;&amp;lt;I&amp;gt;&lt;/code&gt;&lt;/h3&gt;&lt;pre&gt;&lt;code&gt;&lt;div class=\"where\"&gt;impl&amp;lt;I&amp;gt; &lt;a class=\"trait\" href=\"{{channel}}/core/iter/traits/iterator/trait.Iterator.html\" title=\"trait core::iter::traits::iterator::Iterator\"&gt;Iterator&lt;/a&gt; for &lt;a class=\"struct\" href=\"{{channel}}/core/iter/adapters/step_by/struct.StepBy.html\" title=\"struct core::iter::adapters::step_by::StepBy\"&gt;StepBy&lt;/a&gt;&amp;lt;I&amp;gt;&lt;div class=\"where\"&gt;where\n I: &lt;a class=\"trait\" href=\"{{channel}}/core/iter/traits/iterator/trait.Iterator.html\" title=\"trait core::iter::traits::iterator::Iterator\"&gt;Iterator&lt;/a&gt;,&lt;/div&gt;&lt;/div&gt;&lt;div class=\"where\"&gt; type &lt;a href=\"{{channel}}/core/iter/traits/iterator/trait.Iterator.html#associatedtype.Item\" class=\"associatedtype\"&gt;Item&lt;/a&gt; = &amp;lt;I as &lt;a class=\"trait\" href=\"{{channel}}/core/iter/traits/iterator/trait.Iterator.html\" title=\"trait core::iter::traits::iterator::Iterator\"&gt;Iterator&lt;/a&gt;&amp;gt;::&lt;a class=\"associatedtype\" href=\"{{channel}}/core/iter/traits/iterator/trait.Iterator.html#associatedtype.Item\" title=\"type core::iter::traits::iterator::Iterator::Item\"&gt;Item&lt;/a&gt;;&lt;/div&gt;","Take&lt;Self&gt;":"&lt;h3&gt;Notable traits for &lt;code&gt;&lt;a class=\"struct\" href=\"{{channel}}/core/iter/adapters/take/struct.Take.html\" title=\"struct core::iter::adapters::take::Take\"&gt;Take&lt;/a&gt;&amp;lt;I&amp;gt;&lt;/code&gt;&lt;/h3&gt;&lt;pre&gt;&lt;code&gt;&lt;div class=\"where\"&gt;impl&amp;lt;I&amp;gt; &lt;a class=\"trait\" href=\"{{channel}}/core/iter/traits/iterator/trait.Iterator.html\" title=\"trait core::iter::traits::iterator::Iterator\"&gt;Iterator&lt;/a&gt; for &lt;a class=\"struct\" href=\"{{channel}}/core/iter/adapters/take/struct.Take.html\" title=\"struct core::iter::adapters::take::Take\"&gt;Take&lt;/a&gt;&amp;lt;I&amp;gt;&lt;div class=\"where\"&gt;where\n I: &lt;a class=\"trait\" href=\"{{channel}}/core/iter/traits/iterator/trait.Iterator.html\" title=\"trait core::iter::traits::iterator::Iterator\"&gt;Iterator&lt;/a&gt;,&lt;/div&gt;&lt;/div&gt;&lt;div class=\"where\"&gt; type &lt;a href=\"{{channel}}/core/iter/traits/iterator/trait.Iterator.html#associatedtype.Item\" class=\"associatedtype\"&gt;Item&lt;/a&gt; = &amp;lt;I as &lt;a class=\"trait\" href=\"{{channel}}/core/iter/traits/iterator/trait.Iterator.html\" title=\"trait core::iter::traits::iterator::Iterator\"&gt;Iterator&lt;/a&gt;&amp;gt;::&lt;a class=\"associatedtype\" href=\"{{channel}}/core/iter/traits/iterator/trait.Iterator.html#associatedtype.Item\" title=\"type core::iter::traits::iterator::Iterator::Item\"&gt;Item&lt;/a&gt;;&lt;/div&gt;","TakeWhile&lt;Self, P&gt;":"&lt;h3&gt;Notable traits for &lt;code&gt;&lt;a class=\"struct\" href=\"{{channel}}/core/iter/adapters/take_while/struct.TakeWhile.html\" title=\"struct core::iter::adapters::take_while::TakeWhile\"&gt;TakeWhile&lt;/a&gt;&amp;lt;I, P&amp;gt;&lt;/code&gt;&lt;/h3&gt;&lt;pre&gt;&lt;code&gt;&lt;div class=\"where\"&gt;impl&amp;lt;I, P&amp;gt; &lt;a class=\"trait\" href=\"{{channel}}/core/iter/traits/iterator/trait.Iterator.html\" title=\"trait core::iter::traits::iterator::Iterator\"&gt;Iterator&lt;/a&gt; for &lt;a class=\"struct\" href=\"{{channel}}/core/iter/adapters/take_while/struct.TakeWhile.html\" title=\"struct core::iter::adapters::take_while::TakeWhile\"&gt;TakeWhile&lt;/a&gt;&amp;lt;I, P&amp;gt;&lt;div class=\"where\"&gt;where\n I: &lt;a class=\"trait\" href=\"{{channel}}/core/iter/traits/iterator/trait.Iterator.html\" title=\"trait core::iter::traits::iterator::Iterator\"&gt;Iterator&lt;/a&gt;,\n P: &lt;a class=\"trait\" href=\"{{channel}}/core/ops/function/trait.FnMut.html\" title=\"trait core::ops::function::FnMut\"&gt;FnMut&lt;/a&gt;(&amp;amp;&amp;lt;I as &lt;a class=\"trait\" href=\"{{channel}}/core/iter/traits/iterator/trait.Iterator.html\" title=\"trait core::iter::traits::iterator::Iterator\"&gt;Iterator&lt;/a&gt;&amp;gt;::&lt;a class=\"associatedtype\" href=\"{{channel}}/core/iter/traits/iterator/trait.Iterator.html#associatedtype.Item\" title=\"type core::iter::traits::iterator::Iterator::Item\"&gt;Item&lt;/a&gt;) -&amp;gt; &lt;a class=\"primitive\" href=\"{{channel}}/std/primitive.bool.html\"&gt;bool&lt;/a&gt;,&lt;/div&gt;&lt;/div&gt;&lt;div class=\"where\"&gt; type &lt;a href=\"{{channel}}/core/iter/traits/iterator/trait.Iterator.html#associatedtype.Item\" class=\"associatedtype\"&gt;Item&lt;/a&gt; = &amp;lt;I as &lt;a class=\"trait\" href=\"{{channel}}/core/iter/traits/iterator/trait.Iterator.html\" title=\"trait core::iter::traits::iterator::Iterator\"&gt;Iterator&lt;/a&gt;&amp;gt;::&lt;a class=\"associatedtype\" href=\"{{channel}}/core/iter/traits/iterator/trait.Iterator.html#associatedtype.Item\" title=\"type core::iter::traits::iterator::Iterator::Item\"&gt;Item&lt;/a&gt;;&lt;/div&gt;","Zip&lt;Self, &lt;U as IntoIterator&gt;::IntoIter&gt;":"&lt;h3&gt;Notable traits for &lt;code&gt;&lt;a class=\"struct\" href=\"{{channel}}/core/iter/adapters/zip/struct.Zip.html\" title=\"struct core::iter::adapters::zip::Zip\"&gt;Zip&lt;/a&gt;&amp;lt;A, B&amp;gt;&lt;/code&gt;&lt;/h3&gt;&lt;pre&gt;&lt;code&gt;&lt;div class=\"where\"&gt;impl&amp;lt;A, B&amp;gt; &lt;a class=\"trait\" href=\"{{channel}}/core/iter/traits/iterator/trait.Iterator.html\" title=\"trait core::iter::traits::iterator::Iterator\"&gt;Iterator&lt;/a&gt; for &lt;a class=\"struct\" href=\"{{channel}}/core/iter/adapters/zip/struct.Zip.html\" title=\"struct core::iter::adapters::zip::Zip\"&gt;Zip&lt;/a&gt;&amp;lt;A, B&amp;gt;&lt;div class=\"where\"&gt;where\n A: &lt;a class=\"trait\" href=\"{{channel}}/core/iter/traits/iterator/trait.Iterator.html\" title=\"trait core::iter::traits::iterator::Iterator\"&gt;Iterator&lt;/a&gt;,\n B: &lt;a class=\"trait\" href=\"{{channel}}/core/iter/traits/iterator/trait.Iterator.html\" title=\"trait core::iter::traits::iterator::Iterator\"&gt;Iterator&lt;/a&gt;,&lt;/div&gt;&lt;/div&gt;&lt;div class=\"where\"&gt; type &lt;a href=\"{{channel}}/core/iter/traits/iterator/trait.Iterator.html#associatedtype.Item\" class=\"associatedtype\"&gt;Item&lt;/a&gt; = (&amp;lt;A as &lt;a class=\"trait\" href=\"{{channel}}/core/iter/traits/iterator/trait.Iterator.html\" title=\"trait core::iter::traits::iterator::Iterator\"&gt;Iterator&lt;/a&gt;&amp;gt;::&lt;a class=\"associatedtype\" href=\"{{channel}}/core/iter/traits/iterator/trait.Iterator.html#associatedtype.Item\" title=\"type core::iter::traits::iterator::Iterator::Item\"&gt;Item&lt;/a&gt;, &amp;lt;B as &lt;a class=\"trait\" href=\"{{channel}}/core/iter/traits/iterator/trait.Iterator.html\" title=\"trait core::iter::traits::iterator::Iterator\"&gt;Iterator&lt;/a&gt;&amp;gt;::&lt;a class=\"associatedtype\" href=\"{{channel}}/core/iter/traits/iterator/trait.Iterator.html#associatedtype.Item\" title=\"type core::iter::traits::iterator::Iterator::Item\"&gt;Item&lt;/a&gt;);&lt;/div&gt;"}</script> No newline at end of file

@GuillaumeGomez GuillaumeGomez Jul 21, 2026

Copy link
Copy Markdown
Member

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Is this expected?

View changes since the review

Copy link
Copy Markdown
Member Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Yes, previously notable_trait wasn't working properly for non-local traits. Now it consistently shows up.

@notriddle

Copy link
Copy Markdown
Contributor

@bors r=notriddle,GuillaumeGomez

@rust-bors

rust-bors Bot commented Jul 22, 2026

Copy link
Copy Markdown
Contributor

📌 Commit afaa983 has been approved by notriddle,GuillaumeGomez

It is now in the queue for this repository.

@rust-bors rust-bors Bot added S-waiting-on-bors Status: Waiting on bors to run and complete tests. Bors will change the label on completion. and removed S-waiting-on-review Status: Awaiting review from the assignee but also interested parties. labels Jul 22, 2026
@JonathanBrouwer

Copy link
Copy Markdown
Contributor

@bors p=6
Scheduling

@rust-bors

This comment has been minimized.

@rust-bors rust-bors Bot added merged-by-bors This PR was explicitly merged by bors. and removed S-waiting-on-bors Status: Waiting on bors to run and complete tests. Bors will change the label on completion. labels Jul 22, 2026
@rust-bors

rust-bors Bot commented Jul 22, 2026

Copy link
Copy Markdown
Contributor

☀️ Test successful - CI
Approved by: notriddle,GuillaumeGomez
Duration: 3h 18m 8s
Pushing c188565 to main...

@rust-bors
rust-bors Bot merged commit c188565 into rust-lang:main Jul 22, 2026
15 checks passed
@rustbot rustbot added this to the 1.99.0 milestone Jul 22, 2026
@github-actions

Copy link
Copy Markdown
Contributor
What is this? This is an experimental post-merge analysis report that shows differences in test outcomes between the merged PR and its parent PR.

Comparing b803f36 (parent) -> c188565 (this PR)

Test differences

Show 3 test diffs

3 doctest diffs were found. These are ignored, as they are noisy.

Test dashboard

Run

cargo run --manifest-path src/ci/citool/Cargo.toml -- \
    test-dashboard c188565812a9b414ddf02f3c7d89e84f1ba53f7d --output-dir test-dashboard

And then open test-dashboard/index.html in your browser to see an overview of all executed tests.

Job duration changes

  1. x86_64-gnu-debug: 1h 13m -> 1h 56m (+57.9%)
  2. x86_64-gnu-gcc-core-tests: 14m 23s -> 7m 56s (-44.8%)
  3. x86_64-gnu-llvm-21-1: 34m 26s -> 48m 54s (+42.1%)
  4. x86_64-mingw-2: 1h 58m -> 2h 45m (+39.0%)
  5. x86_64-gnu-stable: 1h 43m -> 2h 20m (+35.6%)
  6. dist-i686-mingw: 2h 3m -> 2h 45m (+33.8%)
  7. x86_64-gnu-next-trait-solver-polonius: 1h 2m -> 41m 17s (-33.7%)
  8. i686-gnu-nopt-1: 2h 27m -> 1h 37m (-33.7%)
  9. dist-i686-msvc: 2h 9m -> 1h 31m (-29.1%)
  10. x86_64-gnu-miri: 1h 19m -> 56m 55s (-28.4%)
How to interpret the job duration changes?

Job durations can vary a lot, based on the actual runner instance
that executed the job, system noise, invalidated caches, etc. The table above is provided
mostly for t-infra members, for simpler debugging of potential CI slow-downs.

@camelid
camelid deleted the good-impls branch July 22, 2026 14:00
@rust-timer

Copy link
Copy Markdown
Collaborator

Finished benchmarking commit (c188565): comparison URL.

Overall result: ❌✅ regressions and improvements - please read:

Our benchmarks found a performance regression caused by this PR.
This might be an actual regression, but it can also be just noise.

Next Steps:

  • If the regression was expected or you think it can be justified,
    please write a comment with sufficient written justification, and add
    @rustbot label: +perf-regression-triaged to it, to mark the regression as triaged.
  • If you think that you know of a way to resolve the regression, try to create
    a new PR with a fix for the regression.
  • If you do not understand the regression or you think that it is just noise,
    you can ask the @rust-lang/wg-compiler-performance working group for help (members of this group
    were already notified of this PR).

@rustbot label: +perf-regression
cc @rust-lang/wg-compiler-performance

Instruction count

Our most reliable metric. Used to determine the overall result above. However, even this metric can be noisy.

mean range count
Regressions ❌
(primary)
1.4% [0.6%, 2.2%] 2
Regressions ❌
(secondary)
2.2% [2.2%, 2.2%] 1
Improvements ✅
(primary)
-10.8% [-30.8%, -1.7%] 18
Improvements ✅
(secondary)
-20.3% [-31.4%, -4.9%] 24
All ❌✅ (primary) -9.6% [-30.8%, 2.2%] 20

Max RSS (memory usage)

Results (primary -10.8%, secondary -12.4%)

A less reliable metric. May be of interest, but not used to determine the overall result above.

mean range count
Regressions ❌
(primary)
1.4% [1.4%, 1.4%] 1
Regressions ❌
(secondary)
3.9% [1.5%, 6.2%] 2
Improvements ✅
(primary)
-11.4% [-17.3%, -3.3%] 19
Improvements ✅
(secondary)
-13.7% [-18.2%, -3.8%] 26
All ❌✅ (primary) -10.8% [-17.3%, 1.4%] 20

Cycles

Results (primary -13.8%, secondary -27.0%)

A less reliable metric. May be of interest, but not used to determine the overall result above.

mean range count
Regressions ❌
(primary)
1.7% [1.7%, 1.7%] 1
Regressions ❌
(secondary)
- - 0
Improvements ✅
(primary)
-14.6% [-36.1%, -2.4%] 18
Improvements ✅
(secondary)
-27.0% [-36.4%, -9.5%] 23
All ❌✅ (primary) -13.8% [-36.1%, 1.7%] 19

Binary size

This perf run didn't have relevant results for this metric.

Bootstrap: 490.229s -> 489.502s (-0.15%)
Artifact size: 387.80 MiB -> 387.76 MiB (-0.01%)

@camelid

camelid commented Jul 22, 2026

Copy link
Copy Markdown
Member Author

@rustbot label perf-regression-triaged

Massive improvements with only small regressions (probably due to extra clean_middle_ty call as part of the early filtering). We can improve on that in future PRs.

@nnethercote

Copy link
Copy Markdown
Contributor

Massive improvements

Great work!

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

merged-by-bors This PR was explicitly merged by bors. perf-regression Performance regression. perf-regression-triaged The performance regression has been triaged. relnotes-perf Performance improvements that should be mentioned in the release notes. T-rustdoc Relevant to the rustdoc team, which will review and decide on the PR/issue. T-rustdoc-frontend Relevant to the rustdoc-frontend team, which will review and decide on the web UI/UX output.

Projects

None yet

Development

Successfully merging this pull request may close these issues.

8 participants