@@ -2146,10 +2146,13 @@ mod unsafe_keyword {}
2146
2146
2147
2147
#[ doc( keyword = "use" ) ]
2148
2148
//
2149
- /// Import or rename items from other crates or modules.
2149
+ /// Import or rename items from other crates or modules, or specify precise capturing
2150
+ /// with `use<..>`.
2150
2151
///
2151
- /// Usually a `use` keyword is used to shorten the path required to refer to a module item.
2152
- /// The keyword may appear in modules, blocks and even functions, usually at the top.
2152
+ /// ## Importing items
2153
+ ///
2154
+ /// The `use` keyword is employed to shorten the path required to refer to a module item.
2155
+ /// The keyword may appear in modules, blocks, and even functions, typically at the top.
2153
2156
///
2154
2157
/// The most basic usage of the keyword is `use path::to::item;`,
2155
2158
/// though a number of convenient shortcuts are supported:
@@ -2190,19 +2193,48 @@ mod unsafe_keyword {}
2190
2193
/// // Compiles.
2191
2194
/// let _ = VariantA;
2192
2195
///
2193
- /// // Does not compile !
2196
+ /// // Does not compile!
2194
2197
/// let n = new();
2195
2198
/// ```
2196
2199
///
2197
- /// For more information on `use` and paths in general, see the [Reference].
2200
+ /// For more information on `use` and paths in general, see the [Reference][ref-use-decls] .
2198
2201
///
2199
2202
/// The differences about paths and the `use` keyword between the 2015 and 2018 editions
2200
- /// can also be found in the [Reference].
2203
+ /// can also be found in the [Reference][ref-use-decls].
2204
+ ///
2205
+ /// ## Precise capturing
2206
+ ///
2207
+ /// The `use<..>` syntax is used within certain `impl Trait` bounds to control which generic
2208
+ /// parameters are captured. This is important for return-position `impl Trait` (RPIT) types,
2209
+ /// as it affects borrow checking by controlling which generic parameters can be used in the
2210
+ /// hidden type.
2211
+ ///
2212
+ /// For example, the following function demonstrates an error without precise capturing in
2213
+ /// Rust 2021 and earlier editions:
2214
+ ///
2215
+ /// ```rust,compile_fail,edition2021
2216
+ /// fn f(x: &()) -> impl Sized { x }
2217
+ /// ```
2218
+ ///
2219
+ /// By using `use<'_>` for precise capturing, it can be resolved:
2220
+ ///
2221
+ /// ```rust
2222
+ /// fn f(x: &()) -> impl Sized + use<'_> { x }
2223
+ /// ```
2224
+ ///
2225
+ /// This syntax specifies that the elided lifetime be captured and therefore available for
2226
+ /// use in the hidden type.
2227
+ ///
2228
+ /// In Rust 2024, opaque types automatically capture all lifetime parameters in scope.
2229
+ /// `use<..>` syntax serves as an important way of opting-out of that default.
2230
+ ///
2231
+ /// For more details about precise capturing, see the [Reference][ref-impl-trait].
2201
2232
///
2202
2233
/// [`crate`]: keyword.crate.html
2203
2234
/// [`self`]: keyword.self.html
2204
2235
/// [`super`]: keyword.super.html
2205
- /// [Reference]: ../reference/items/use-declarations.html
2236
+ /// [ref-use-decls]: ../reference/items/use-declarations.html
2237
+ /// [ref-impl-trait]: ../reference/types/impl-trait.html
2206
2238
mod use_keyword { }
2207
2239
2208
2240
#[ doc( keyword = "where" ) ]
0 commit comments