Skip to content

region error messages involving impls are confusing #52742

Closed
@nikomatsakis

Description

@nikomatsakis
#![feature(nll)]
#![feature(in_band_lifetimes)]
#![feature(impl_header_lifetime_elision)]

struct Foo<'a, 'b> {
    x: &'a u32,
    y: &'b u32,
}

struct Bar<'b> {
    z: &'b u32
}

impl Foo<'_, '_> {
    fn take_bar(&mut self, b: Bar<'_>) {
        self.y = b.z
    }
}

fn main() { }

produces this confusing error:

error[E0621]: explicit lifetime required in the type of `b`
  --> src/main.rs:15:9
   |
14 |     fn take_bar(&mut self, b: Bar<'_>) {
   |                            - consider changing the type of `b` to `Bar<'_>`
15 |         self.y = b.z
   |         ^^^^^^^^^^^^ lifetime `'_` required

I think the problem here is that the "nice region error" code is actually getting in the way of the NLL errors, which are better.

Metadata

Metadata

Assignees

Labels

A-NLLArea: Non-lexical lifetimes (NLL)NLL-diagnosticsWorking towards the "diagnostic parity" goalT-compilerRelevant to the compiler team, which will review and decide on the PR/issue.

Type

No type

Projects

No projects

Milestone

No milestone

Relationships

None yet

Development

No branches or pull requests

Issue actions