Open
Description
Not sure if worth tracking/discussing. I'm basically revisiting this because of IATs and LTAs. I know that T-types would like to avoid implying outlives-bounds in more places and under more circumstances at least until various soundness issues related to them have been fixed (LTAs prolly being the exception) (via: #t-types > implied bounds for the more recent features? @ 💬 (2023)).
Presently, when inferring outlives-bounds we only consider the explicit predicates of the corresp. trait when looking at projections as noted by this comment (which was written by me):
rust/compiler/rustc_hir_analysis/src/outlives/implicit_infer.rs
Lines 207 to 209 in 77101fe
This means:
trait Trait<'a, T: 'a> { type Project; }
impl<'a, T: 'a> Trait<'a, T> for () { type Project = (); }
struct Env<'a, T>(<() as Trait<'a, T>>::Project);
// ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ from this projection, we imply `T: 'a`
//fn env<'a, T>() { let _: Env<'a, T>; } //~ ERROR the parameter type `T` may not live long enough
trait Trait { type Project<'a, T: 'a>; }
impl Trait for () { type Project<'a, T: 'a> = (); }
struct Env<'a, T>(<() as Trait>::Project<'a, T>); //~ ERROR the parameter type `T` may not live long enough
// ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ we **don't** imply anything from this projection!
Metadata
Metadata
Assignees
Labels
Area: Generic associated types (GATs)Area: Associated items (types, constants & functions)Area: Implied bounds / inferred outlives-boundsArea: Lifetimes / regionsCategory: Discussion or questions that doesn't represent real issues.Low priorityRelevant to the types team, which will review and decide on the PR/issue.