Skip to content

Attempt to set a default value for a lifetime generic parameter produces confusing diagnostic #107492

Closed
@obi1kenobi

Description

@obi1kenobi

Code

pub struct DefaultLifetime<'a, 'b = 'static> {
    _marker: std::marker::PhantomData<&'a &'b ()>,
}

Current output

error: expected one of `,`, `:`, or `>`, found `=`
  --> src/lib.rs:20:39
   |
20 |     pub struct DefaultLifetime<'a, 'b = 'static> {
   |                                    -- ^ expected one of `,`, `:`, or `>`
   |                                    |
   |                                    maybe try to close unmatched angle bracket

Desired output

error: expected one of `,`, `:`, or `>`, found `=`
  --> src/lib.rs:20:39
   |
20 |     pub struct DefaultLifetime<'a, 'b = 'static> {
   |                                       ^^^^^^^^^ lifetime parameters cannot have default values

Rationale and extra context

AFAIK, lifetime generic parameters are not currently allowed to have default values. Attempting to use the "obvious" syntax for setting a default lifetime is an opportunity to teach the user that this is not a supported feature, and certainly shouldn't claim that there's an unmatched angle bracket just because it didn't expect the = during parsing.

This is happening on rustc 1.69.0-nightly (d7948c843 2023-01-26) with the 2021 edition.

Other cases

No response

Anything else?

No response

Metadata

Metadata

Assignees

Labels

A-diagnosticsArea: Messages for errors, warnings, and lintsE-mentorCall for participation: This issue has a mentor. Use #t-compiler/help on Zulip for discussion.T-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