Skip to content

Commit 5823bf2

Browse files
committed
Remove '_ from the keyword list.
The anonymous lifetime `'_` is not a keyword according to the Reference and the Ferrocene spec. This commit changes it to a symbol. This changes the behaviour of the `is_any_keyword` predicate, but that has no effect in practice because nothing depended on that behaviour. (Rust-analyzer calls its equivalent constant `tick_underscore`. I don't have a strong preference for either name, I just went with `underscore_lifetime` because it is similar to the old keyword name.)
1 parent 296926e commit 5823bf2

File tree

19 files changed

+44
-41
lines changed

19 files changed

+44
-41
lines changed

compiler/rustc_ast_lowering/src/lib.rs

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -761,7 +761,7 @@ impl<'a, 'hir> LoweringContext<'a, 'hir> {
761761
let _def_id = self.create_def(
762762
self.current_hir_id_owner.def_id,
763763
param,
764-
kw::UnderscoreLifetime,
764+
sym::underscore_lifetime,
765765
DefKind::LifetimeParam,
766766
ident.span,
767767
);
@@ -1200,7 +1200,7 @@ impl<'a, 'hir> LoweringContext<'a, 'hir> {
12001200
self.next_node_id()
12011201
};
12021202
let span = self.tcx.sess.source_map().start_point(t.span).shrink_to_hi();
1203-
Lifetime { ident: Ident::new(kw::UnderscoreLifetime, span), id }
1203+
Lifetime { ident: Ident::new(sym::underscore_lifetime, span), id }
12041204
});
12051205
let lifetime = self.lower_lifetime(&region);
12061206
hir::TyKind::Ref(lifetime, self.lower_mt(mt, itctx))
@@ -1216,7 +1216,7 @@ impl<'a, 'hir> LoweringContext<'a, 'hir> {
12161216
self.next_node_id()
12171217
};
12181218
let span = self.tcx.sess.source_map().start_point(t.span).shrink_to_hi();
1219-
Lifetime { ident: Ident::new(kw::UnderscoreLifetime, span), id }
1219+
Lifetime { ident: Ident::new(sym::underscore_lifetime, span), id }
12201220
});
12211221
let lifetime = self.lower_lifetime(&region);
12221222
let kind = hir::TyKind::Ref(lifetime, self.lower_mt(mt, itctx));

compiler/rustc_borrowck/src/diagnostics/explain_borrow.rs

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -17,7 +17,7 @@ use rustc_middle::mir::{
1717
};
1818
use rustc_middle::ty::adjustment::PointerCoercion;
1919
use rustc_middle::ty::{self, RegionVid, Ty, TyCtxt};
20-
use rustc_span::symbol::{Symbol, kw};
20+
use rustc_span::symbol::Symbol;
2121
use rustc_span::{DesugaringKind, Span, sym};
2222
use rustc_trait_selection::error_reporting::traits::FindExprBySpan;
2323
use tracing::{debug, instrument};
@@ -418,7 +418,7 @@ impl<'tcx> BorrowExplanation<'tcx> {
418418
}
419419
if let ConstraintCategory::OpaqueType = category {
420420
let suggestable_name =
421-
if region_name.was_named() { region_name.name } else { kw::UnderscoreLifetime };
421+
if region_name.was_named() { region_name.name } else { sym::underscore_lifetime };
422422

423423
let msg = format!(
424424
"you can add a bound to the {}to make it last less than `'static` and match `{region_name}`",

compiler/rustc_borrowck/src/diagnostics/region_errors.rs

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -16,7 +16,7 @@ use rustc_middle::hir::place::PlaceBase;
1616
use rustc_middle::mir::{ConstraintCategory, ReturnConstraint};
1717
use rustc_middle::ty::{self, GenericArgs, Region, RegionVid, Ty, TyCtxt, TypeVisitor};
1818
use rustc_span::Span;
19-
use rustc_span::symbol::{Ident, kw};
19+
use rustc_span::symbol::{Ident, kw, sym};
2020
use rustc_trait_selection::error_reporting::InferCtxtErrorExt;
2121
use rustc_trait_selection::error_reporting::infer::nice_region_error::{
2222
self, HirTraitObjectVisitor, NiceRegionError, TraitObjectVisitor, find_anon_type,
@@ -786,7 +786,7 @@ impl<'infcx, 'tcx> MirBorrowckCtxt<'_, 'infcx, 'tcx> {
786786
// These situations are bound to result in errors.
787787
// To prevent an immediate ICE, we opt to create a dummy name instead.
788788
let fr_name = self.give_region_a_name(*fr).unwrap_or(RegionName {
789-
name: kw::UnderscoreLifetime,
789+
name: sym::underscore_lifetime,
790790
source: RegionNameSource::Static,
791791
});
792792
fr_name.highlight_region_name(&mut diag);
@@ -858,7 +858,7 @@ impl<'infcx, 'tcx> MirBorrowckCtxt<'_, 'infcx, 'tcx> {
858858
return;
859859
};
860860

861-
let lifetime = if f.has_name() { fr_name.name } else { kw::UnderscoreLifetime };
861+
let lifetime = if f.has_name() { fr_name.name } else { sym::underscore_lifetime };
862862

863863
let arg = match param.param.pat.simple_ident() {
864864
Some(simple_ident) => format!("argument `{simple_ident}`"),

compiler/rustc_hir/src/hir.rs

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -79,7 +79,7 @@ impl ParamName {
7979
pub fn ident(&self) -> Ident {
8080
match *self {
8181
ParamName::Plain(ident) => ident,
82-
ParamName::Fresh | ParamName::Error => Ident::with_dummy_span(kw::UnderscoreLifetime),
82+
ParamName::Fresh | ParamName::Error => Ident::with_dummy_span(sym::underscore_lifetime),
8383
}
8484
}
8585
}
@@ -153,7 +153,7 @@ impl Lifetime {
153153
}
154154

155155
pub fn is_anonymous(&self) -> bool {
156-
self.ident.name == kw::Empty || self.ident.name == kw::UnderscoreLifetime
156+
self.ident.name == kw::Empty || self.ident.name == sym::underscore_lifetime
157157
}
158158

159159
pub fn suggestion_position(&self) -> (LifetimeSuggestionPosition, Span) {

compiler/rustc_hir_analysis/src/hir_ty_lowering/mod.rs

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -45,7 +45,7 @@ use rustc_middle::ty::{
4545
use rustc_middle::{bug, span_bug};
4646
use rustc_session::lint::builtin::AMBIGUOUS_ASSOCIATED_ITEMS;
4747
use rustc_span::edit_distance::find_best_match_for_name;
48-
use rustc_span::symbol::{Ident, Symbol, kw};
48+
use rustc_span::symbol::{Ident, Symbol, kw, sym};
4949
use rustc_span::{DUMMY_SP, Span};
5050
use rustc_trait_selection::infer::InferCtxtExt;
5151
use rustc_trait_selection::traits::wf::object_region_bounds;
@@ -2688,15 +2688,15 @@ impl<'tcx> dyn HirTyLowerer<'tcx> + '_ {
26882688
) {
26892689
for br in referenced_regions.difference(&constrained_regions) {
26902690
let br_name = match *br {
2691-
ty::BoundRegionKind::Named(_, kw::UnderscoreLifetime)
2691+
ty::BoundRegionKind::Named(_, sym::underscore_lifetime)
26922692
| ty::BoundRegionKind::Anon
26932693
| ty::BoundRegionKind::ClosureEnv => "an anonymous lifetime".to_string(),
26942694
ty::BoundRegionKind::Named(_, name) => format!("lifetime `{name}`"),
26952695
};
26962696

26972697
let mut err = generate_err(&br_name);
26982698

2699-
if let ty::BoundRegionKind::Named(_, kw::UnderscoreLifetime)
2699+
if let ty::BoundRegionKind::Named(_, sym::underscore_lifetime)
27002700
| ty::BoundRegionKind::Anon = *br
27012701
{
27022702
// The only way for an anonymous lifetime to wind up

compiler/rustc_middle/src/ty/generics.rs

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -3,7 +3,7 @@ use rustc_data_structures::fx::FxHashMap;
33
use rustc_hir::def_id::DefId;
44
use rustc_macros::{HashStable, TyDecodable, TyEncodable};
55
use rustc_span::Span;
6-
use rustc_span::symbol::{Symbol, kw};
6+
use rustc_span::symbol::{Symbol, kw, sym};
77
use tracing::instrument;
88

99
use super::{Clause, InstantiatedPredicates, ParamConst, ParamTy, Ty, TyCtxt};
@@ -75,7 +75,7 @@ impl GenericParamDef {
7575
pub fn is_anonymous_lifetime(&self) -> bool {
7676
match self.kind {
7777
GenericParamDefKind::Lifetime => {
78-
self.name == kw::UnderscoreLifetime || self.name == kw::Empty
78+
self.name == sym::underscore_lifetime || self.name == kw::Empty
7979
}
8080
_ => false,
8181
}

compiler/rustc_middle/src/ty/mod.rs

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -453,7 +453,7 @@ impl EarlyParamRegion {
453453
/// Does this early bound region have a name? Early bound regions normally
454454
/// always have names except when using anonymous lifetimes (`'_`).
455455
pub fn has_name(&self) -> bool {
456-
self.name != kw::UnderscoreLifetime && self.name != kw::Empty
456+
self.name != sym::underscore_lifetime && self.name != kw::Empty
457457
}
458458
}
459459

compiler/rustc_middle/src/ty/print/pretty.rs

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -2676,7 +2676,7 @@ impl<'tcx> FmtPrinter<'_, 'tcx> {
26762676

26772677
(name, ty::BoundRegionKind::Named(CRATE_DEF_ID.to_def_id(), name))
26782678
}
2679-
ty::BoundRegionKind::Named(def_id, kw::UnderscoreLifetime | kw::Empty) => {
2679+
ty::BoundRegionKind::Named(def_id, sym::underscore_lifetime | kw::Empty) => {
26802680
let name = next_name(self);
26812681

26822682
if let Some(lt_idx) = lifetime_idx {

compiler/rustc_middle/src/ty/region.rs

Lines changed: 3 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -411,7 +411,9 @@ impl core::fmt::Debug for BoundRegion {
411411
impl BoundRegionKind {
412412
pub fn is_named(&self) -> bool {
413413
match *self {
414-
BoundRegionKind::Named(_, name) => name != kw::UnderscoreLifetime && name != kw::Empty,
414+
BoundRegionKind::Named(_, name) => {
415+
name != sym::underscore_lifetime && name != kw::Empty
416+
}
415417
_ => false,
416418
}
417419
}

compiler/rustc_parse/src/parser/ty.rs

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1290,7 +1290,7 @@ impl<'a> Parser<'a> {
12901290
if let Some((ident, is_raw)) = self.token.lifetime() {
12911291
if matches!(is_raw, IdentIsRaw::No)
12921292
&& ident.without_first_quote().is_reserved()
1293-
&& ![kw::UnderscoreLifetime, kw::StaticLifetime].contains(&ident.name)
1293+
&& ![sym::underscore_lifetime, kw::StaticLifetime].contains(&ident.name)
12941294
{
12951295
self.dcx().emit_err(errors::KeywordLifetime { span: ident.span });
12961296
}

compiler/rustc_resolve/src/late.rs

Lines changed: 6 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -1638,7 +1638,7 @@ impl<'a, 'ast, 'ra: 'ast, 'tcx> LateResolutionVisitor<'a, 'ast, 'ra, 'tcx> {
16381638
return;
16391639
}
16401640

1641-
if ident.name == kw::UnderscoreLifetime {
1641+
if ident.name == sym::underscore_lifetime {
16421642
return self.resolve_anonymous_lifetime(lifetime, lifetime.id, false);
16431643
}
16441644

@@ -1748,7 +1748,7 @@ impl<'a, 'ast, 'ra: 'ast, 'tcx> LateResolutionVisitor<'a, 'ast, 'ra, 'tcx> {
17481748
id_for_lint: NodeId,
17491749
elided: bool,
17501750
) {
1751-
debug_assert_eq!(lifetime.ident.name, kw::UnderscoreLifetime);
1751+
debug_assert_eq!(lifetime.ident.name, sym::underscore_lifetime);
17521752

17531753
let kind =
17541754
if elided { MissingLifetimeKind::Ampersand } else { MissingLifetimeKind::Underscore };
@@ -1877,7 +1877,7 @@ impl<'a, 'ast, 'ra: 'ast, 'tcx> LateResolutionVisitor<'a, 'ast, 'ra, 'tcx> {
18771877
#[instrument(level = "debug", skip(self))]
18781878
fn resolve_elided_lifetime(&mut self, anchor_id: NodeId, span: Span) {
18791879
let id = self.r.next_node_id();
1880-
let lt = Lifetime { id, ident: Ident::new(kw::UnderscoreLifetime, span) };
1880+
let lt = Lifetime { id, ident: Ident::new(sym::underscore_lifetime, span) };
18811881

18821882
self.record_lifetime_res(
18831883
anchor_id,
@@ -1894,7 +1894,7 @@ impl<'a, 'ast, 'ra: 'ast, 'tcx> LateResolutionVisitor<'a, 'ast, 'ra, 'tcx> {
18941894
binder: NodeId,
18951895
kind: MissingLifetimeKind,
18961896
) -> LifetimeRes {
1897-
debug_assert_eq!(ident.name, kw::UnderscoreLifetime);
1897+
debug_assert_eq!(ident.name, sym::underscore_lifetime);
18981898
debug!(?ident.span);
18991899

19001900
// Leave the responsibility to create the `LocalDefId` to lowering.
@@ -1995,7 +1995,7 @@ impl<'a, 'ast, 'ra: 'ast, 'tcx> LateResolutionVisitor<'a, 'ast, 'ra, 'tcx> {
19951995
// originating from macros, since the segment's span might be from a macro arg.
19961996
segment.ident.span.find_ancestor_inside(path_span).unwrap_or(path_span)
19971997
};
1998-
let ident = Ident::new(kw::UnderscoreLifetime, elided_lifetime_span);
1998+
let ident = Ident::new(sym::underscore_lifetime, elided_lifetime_span);
19991999

20002000
let kind = if segment.has_generic_args {
20012001
MissingLifetimeKind::Comma
@@ -2872,7 +2872,7 @@ impl<'a, 'ast, 'ra: 'ast, 'tcx> LateResolutionVisitor<'a, 'ast, 'ra, 'tcx> {
28722872
}
28732873
}
28742874

2875-
if param.ident.name == kw::UnderscoreLifetime {
2875+
if param.ident.name == sym::underscore_lifetime {
28762876
self.r
28772877
.dcx()
28782878
.emit_err(errors::UnderscoreLifetimeIsReserved { span: param.ident.span });

compiler/rustc_resolve/src/late/diagnostics.rs

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -2744,7 +2744,7 @@ impl<'ast, 'ra: 'ast, 'tcx> LateResolutionVisitor<'_, 'ast, 'ra, 'tcx> {
27442744
lifetime_ref: &ast::Lifetime,
27452745
outer_lifetime_ref: Option<Ident>,
27462746
) {
2747-
debug_assert_ne!(lifetime_ref.ident.name, kw::UnderscoreLifetime);
2747+
debug_assert_ne!(lifetime_ref.ident.name, sym::underscore_lifetime);
27482748
let mut err = if let Some(outer) = outer_lifetime_ref {
27492749
struct_span_code_err!(
27502750
self.r.dcx(),
@@ -3035,7 +3035,7 @@ impl<'ast, 'ra: 'ast, 'tcx> LateResolutionVisitor<'_, 'ast, 'ra, 'tcx> {
30353035
})
30363036
.flat_map(|rib| rib.bindings.iter())
30373037
.map(|(&ident, &res)| (ident, res))
3038-
.filter(|(ident, _)| ident.name != kw::UnderscoreLifetime)
3038+
.filter(|(ident, _)| ident.name != sym::underscore_lifetime)
30393039
.collect();
30403040
debug!(?in_scope_lifetimes);
30413041

compiler/rustc_span/src/symbol.rs

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -91,7 +91,6 @@ symbols! {
9191
Try: "try", // >= 2018 Edition only
9292

9393
// Special lifetime names
94-
UnderscoreLifetime: "'_",
9594
StaticLifetime: "'static",
9695

9796
// Weak keywords, have special meaning only in specific contexts.
@@ -2086,6 +2085,7 @@ symbols! {
20862085
unchecked_sub,
20872086
underscore_const_names,
20882087
underscore_imports,
2088+
underscore_lifetime: "'_",
20892089
underscore_lifetimes,
20902090
uniform_paths,
20912091
unimplemented_macro,

compiler/rustc_trait_selection/src/error_reporting/infer/nice_region_error/named_anon_conflict.rs

Lines changed: 3 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -3,7 +3,7 @@
33
44
use rustc_errors::Diag;
55
use rustc_middle::ty;
6-
use rustc_span::symbol::kw;
6+
use rustc_span::symbol::sym;
77
use tracing::debug;
88

99
use crate::error_reporting::infer::nice_region_error::NiceRegionError;
@@ -60,7 +60,8 @@ impl<'a, 'tcx> NiceRegionError<'a, 'tcx> {
6060
let is_impl_item = region_info.is_impl_item;
6161

6262
match br {
63-
ty::BoundRegionKind::Named(_, kw::UnderscoreLifetime) | ty::BoundRegionKind::Anon => {}
63+
ty::BoundRegionKind::Named(_, sym::underscore_lifetime) | ty::BoundRegionKind::Anon => {
64+
}
6465
_ => {
6566
/* not an anonymous region */
6667
debug!("try_report_named_anon_conflict: not an anonymous region");

compiler/rustc_trait_selection/src/error_reporting/infer/region.rs

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -12,7 +12,7 @@ use rustc_middle::bug;
1212
use rustc_middle::traits::ObligationCauseCode;
1313
use rustc_middle::ty::error::TypeError;
1414
use rustc_middle::ty::{self, IsSuggestable, Region, Ty, TyCtxt, TypeVisitableExt as _};
15-
use rustc_span::symbol::kw;
15+
use rustc_span::symbol::{kw, sym};
1616
use rustc_span::{BytePos, ErrorGuaranteed, Span, Symbol};
1717
use rustc_type_ir::Upcast as _;
1818
use tracing::{debug, instrument};
@@ -1105,7 +1105,7 @@ fn msg_span_from_named_region<'tcx>(
11051105
match fr.bound_region {
11061106
ty::BoundRegionKind::Named(param_def_id, name) => {
11071107
let span = tcx.def_span(param_def_id);
1108-
let text = if name == kw::UnderscoreLifetime {
1108+
let text = if name == sym::underscore_lifetime {
11091109
"the anonymous lifetime as defined here".to_string()
11101110
} else {
11111111
format!("the lifetime `{name}` as defined here")

compiler/rustc_trait_selection/src/errors.rs

Lines changed: 4 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -14,7 +14,7 @@ use rustc_hir::{FnRetTy, GenericParamKind, Node};
1414
use rustc_macros::{Diagnostic, Subdiagnostic};
1515
use rustc_middle::ty::print::{PrintTraitRefExt as _, TraitRefPrintOnlyTraitPath};
1616
use rustc_middle::ty::{self, Binder, ClosureKind, FnSig, PolyTraitRef, Region, Ty, TyCtxt};
17-
use rustc_span::symbol::{Ident, Symbol, kw};
17+
use rustc_span::symbol::{Ident, Symbol, kw, sym};
1818
use rustc_span::{BytePos, Span};
1919

2020
use crate::error_reporting::infer::ObligationCauseAsDiagArg;
@@ -548,7 +548,7 @@ impl Subdiagnostic for AddLifetimeParamsSuggestion<'_> {
548548
.iter()
549549
.filter(|p| matches!(p.kind, GenericParamKind::Lifetime { .. }))
550550
.map(|p| p.name.ident().name)
551-
.find(|i| *i != kw::UnderscoreLifetime);
551+
.find(|i| *i != sym::underscore_lifetime);
552552
let introduce_new = suggestion_param_name.is_none();
553553

554554
let mut default = "'a".to_string();
@@ -558,7 +558,7 @@ impl Subdiagnostic for AddLifetimeParamsSuggestion<'_> {
558558
.iter()
559559
.filter(|p| matches!(p.kind, GenericParamKind::Lifetime { .. }))
560560
.map(|p| p.name.ident().name)
561-
.filter(|i| *i != kw::UnderscoreLifetime)
561+
.filter(|i| *i != sym::underscore_lifetime)
562562
.map(|l| l.to_string())
563563
.collect();
564564
if let Some(lt) =
@@ -584,7 +584,7 @@ impl Subdiagnostic for AddLifetimeParamsSuggestion<'_> {
584584
let make_suggestion = |ident: Ident| {
585585
if ident.name == kw::Empty && ident.span.is_empty() {
586586
format!("{}, ", self.suggestion_param_name)
587-
} else if ident.name == kw::UnderscoreLifetime && ident.span.is_empty() {
587+
} else if ident.name == sym::underscore_lifetime && ident.span.is_empty() {
588588
format!("{} ", self.suggestion_param_name)
589589
} else {
590590
self.suggestion_param_name.clone()

compiler/rustc_trait_selection/src/errors/note_and_explain.rs

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -3,7 +3,7 @@ use rustc_hir::def_id::LocalDefId;
33
use rustc_middle::bug;
44
use rustc_middle::ty::{self, TyCtxt};
55
use rustc_span::Span;
6-
use rustc_span::symbol::kw;
6+
use rustc_span::symbol::sym;
77

88
use crate::error_reporting::infer::nice_region_error::find_anon_type;
99
use crate::fluent_generated as fluent;
@@ -58,7 +58,7 @@ impl<'a> DescriptionCtx<'a> {
5858
} else {
5959
tcx.def_span(scope)
6060
};
61-
if name == kw::UnderscoreLifetime {
61+
if name == sym::underscore_lifetime {
6262
(Some(span), "as_defined_anon", String::new())
6363
} else {
6464
(Some(span), "as_defined", name.to_string())

src/librustdoc/clean/mod.rs

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -2147,7 +2147,7 @@ pub(crate) fn clean_middle_ty<'tcx>(
21472147
.flat_map(|pred| pred.bound_vars())
21482148
.filter_map(|var| match var {
21492149
ty::BoundVariableKind::Region(ty::BoundRegionKind::Named(def_id, name))
2150-
if name != kw::UnderscoreLifetime =>
2150+
if name != sym::underscore_lifetime =>
21512151
{
21522152
Some(GenericParamDef::lifetime(def_id, name))
21532153
}
@@ -3111,7 +3111,7 @@ fn clean_bound_vars(bound_vars: &ty::List<ty::BoundVariableKind>) -> Vec<Generic
31113111
.into_iter()
31123112
.filter_map(|var| match var {
31133113
ty::BoundVariableKind::Region(ty::BoundRegionKind::Named(def_id, name))
3114-
if name != kw::UnderscoreLifetime =>
3114+
if name != sym::underscore_lifetime =>
31153115
{
31163116
Some(GenericParamDef::lifetime(def_id, name))
31173117
}

src/librustdoc/clean/types.rs

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1301,7 +1301,7 @@ impl Lifetime {
13011301
}
13021302

13031303
pub(crate) fn elided() -> Lifetime {
1304-
Lifetime(kw::UnderscoreLifetime)
1304+
Lifetime(sym::underscore_lifetime)
13051305
}
13061306
}
13071307

0 commit comments

Comments
 (0)