pub struct Lifetime {
pub hir_id: HirId,
pub ident: Ident,
pub res: LifetimeName,
pub is_anon_in_path: IsAnonInPath,
}
Expand description
A lifetime. The valid field combinations are non-obvious. The following
example shows some of them. See also the comments on LifetimeName
.
#[repr(C)]
struct S<'a>(&'a u32); // res=Param, name='a, IsAnonInPath::No
unsafe extern "C" {
fn f1(s: S); // res=Param, name='_, IsAnonInPath::Yes
fn f2(s: S<'_>); // res=Param, name='_, IsAnonInPath::No
fn f3<'a>(s: S<'a>); // res=Param, name='a, IsAnonInPath::No
}
struct St<'a> { x: &'a u32 } // res=Param, name='a, IsAnonInPath::No
fn f() {
_ = St { x: &0 }; // res=Infer, name='_, IsAnonInPath::Yes
_ = St::<'_> { x: &0 }; // res=Infer, name='_, IsAnonInPath::No
}
struct Name<'a>(&'a str); // res=Param, name='a, IsAnonInPath::No
const A: Name = Name("a"); // res=Static, name='_, IsAnonInPath::Yes
const B: &str = ""; // res=Static, name='_, IsAnonInPath::No
static C: &'_ str = ""; // res=Static, name='_, IsAnonInPath::No
static D: &'static str = ""; // res=Static, name='static, IsAnonInPath::No
trait Tr {}
fn tr(_: Box<dyn Tr>) {} // res=ImplicitObjectLifetimeDefault, name='_, IsAnonInPath::No
// (commented out because these cases trigger errors)
// struct S1<'a>(&'a str); // res=Param, name='a, IsAnonInPath::No
// struct S2(S1); // res=Error, name='_, IsAnonInPath::Yes
// struct S3(S1<'_>); // res=Error, name='_, IsAnonInPath::No
// struct S4(S1<'a>); // res=Error, name='a, IsAnonInPath::No
Fields§
§hir_id: HirId
§ident: Ident
Either a named lifetime definition (e.g. 'a
, 'static
) or an
anonymous lifetime ('_
, either explicitly written, or inserted for
things like &type
).
res: LifetimeName
Semantics of this lifetime.
is_anon_in_path: IsAnonInPath
Is the lifetime anonymous and in a path? Used only for error
suggestions. See Lifetime::suggestion
for example use.
Implementations§
Trait Implementations§
Source§impl<__CTX> HashStable<__CTX> for Lifetimewhere
__CTX: HashStableContext,
impl<__CTX> HashStable<__CTX> for Lifetimewhere
__CTX: HashStableContext,
fn hash_stable(&self, __hcx: &mut __CTX, __hasher: &mut StableHasher)
impl Copy for Lifetime
Auto Trait Implementations§
impl DynSend for Lifetime
impl DynSync for Lifetime
impl Freeze for Lifetime
impl RefUnwindSafe for Lifetime
impl Send for Lifetime
impl Sync for Lifetime
impl Unpin for Lifetime
impl UnwindSafe for Lifetime
Blanket Implementations§
Source§impl<'tcx, T> ArenaAllocatable<'tcx, IsCopy> for Twhere
T: Copy,
impl<'tcx, T> ArenaAllocatable<'tcx, IsCopy> for Twhere
T: Copy,
fn allocate_on(self, arena: &'tcx Arena<'tcx>) -> &'tcx mut T
fn allocate_from_iter( arena: &'tcx Arena<'tcx>, iter: impl IntoIterator<Item = T>, ) -> &'tcx mut [T]
Source§impl<T> BorrowMut<T> for Twhere
T: ?Sized,
impl<T> BorrowMut<T> for Twhere
T: ?Sized,
Source§fn borrow_mut(&mut self) -> &mut T
fn borrow_mut(&mut self) -> &mut T
Mutably borrows from an owned value. Read more
Source§impl<T> CloneToUninit for Twhere
T: Clone,
impl<T> CloneToUninit for Twhere
T: Clone,
Source§impl<T> Instrument for T
impl<T> Instrument for T
Source§fn instrument(self, span: Span) -> Instrumented<Self>
fn instrument(self, span: Span) -> Instrumented<Self>
Source§fn in_current_span(self) -> Instrumented<Self>
fn in_current_span(self) -> Instrumented<Self>
Source§impl<T> IntoEither for T
impl<T> IntoEither for T
Source§fn into_either(self, into_left: bool) -> Either<Self, Self>
fn into_either(self, into_left: bool) -> Either<Self, Self>
Converts
self
into a Left
variant of Either<Self, Self>
if into_left
is true
.
Converts self
into a Right
variant of Either<Self, Self>
otherwise. Read moreSource§fn into_either_with<F>(self, into_left: F) -> Either<Self, Self>
fn into_either_with<F>(self, into_left: F) -> Either<Self, Self>
Converts
self
into a Left
variant of Either<Self, Self>
if into_left(&self)
returns true
.
Converts self
into a Right
variant of Either<Self, Self>
otherwise. Read moreSource§impl<T> Pointable for T
impl<T> Pointable for T
Source§impl<T> WithSubscriber for T
impl<T> WithSubscriber for T
Source§fn with_subscriber<S>(self, subscriber: S) -> WithDispatch<Self>
fn with_subscriber<S>(self, subscriber: S) -> WithDispatch<Self>
Source§fn with_current_subscriber(self) -> WithDispatch<Self>
fn with_current_subscriber(self) -> WithDispatch<Self>
Layout§
Note: Most layout information is completely unstable and may even differ between compilations. The only exception is types with certain repr(...)
attributes. Please see the Rust Reference's “Type Layout” chapter for details on type layout guarantees.
Size: 28 bytes