Rollup merge of - lcnr:discriminant-docs, r=compiler-errors

clarify `fn discriminant` guarantees: only free lifetimes may get erased

cc https://github.com/rust-lang/rust/pull/104299/files#r1397082347

don't think this necessitates a backport by itself, but should imo be included if one were to exist.

r? types
This commit is contained in:
Matthias Krüger 2023-11-17 23:04:24 +01:00 committed by GitHub
commit e06a6d3ebe
No known key found for this signature in database
GPG Key ID: 4AEE18F83AFDEB23

@ -1132,10 +1132,12 @@ impl<T> fmt::Debug for Discriminant<T> {
/// ///
/// [Reference]: ../../reference/items/enumerations.html#custom-discriminant-values-for-fieldless-enumerations /// [Reference]: ../../reference/items/enumerations.html#custom-discriminant-values-for-fieldless-enumerations
/// ///
/// The value of a [`Discriminant<T>`] is independent of any *lifetimes* in `T`. As such, reading /// The value of a [`Discriminant<T>`] is independent of any *free lifetimes* in `T`. As such,
/// or writing a `Discriminant<Foo<'a>>` as a `Discriminant<Foo<'b>>` (whether via [`transmute`] or /// reading or writing a `Discriminant<Foo<'a>>` as a `Discriminant<Foo<'b>>` (whether via
/// otherwise) is always sound. Note that this is **not** true for other kinds of generic /// [`transmute`] or otherwise) is always sound. Note that this is **not** true for other kinds
/// parameters; `Discriminant<Foo<A>>` and `Discriminant<Foo<B>>` might be incompatible. /// of generic parameters and for higher-ranked lifetimes; `Discriminant<Foo<A>>` and
/// `Discriminant<Foo<B>>` as well as `Discriminant<Bar<dyn for<'a> Trait<'a>>>` and
/// `Discriminant<Bar<dyn Trait<'static>>>` may be incompatible.
/// ///
/// # Examples /// # Examples
/// ///