Closed
Description
Code
// edition: 2021
trait Trait {}
fn fun() -> &Trait {
todo!()
}
fn main() {}
Current output
error[E0106]: missing lifetime specifier
--> <source>:5:13
|
5 | fn fun() -> &Trait {
| ^ expected named lifetime parameter
|
= help: this function's return type contains a borrowed value, but there is no value for it to be borrowed from
help: consider using the `'static` lifetime, but this is uncommon unless you're returning a borrowed value from a `const` or a `static`
|
5 | fn fun() -> &'static Trait {
| +++++++
error[E0782]: trait objects must include the `dyn` keyword
--> <source>:5:14
|
5 | fn fun() -> &Trait {
| ^^^^^
|
help: add `dyn` keyword before this trait
|
5 | fn fun() -> &dyn Trait {
| +++
error: aborting due to 2 previous errors
Some errors have detailed explanations: E0106, E0782.
For more information about an error, try `rustc --explain E0106`.
Desired output
error[E0782]: trait objects must include the `dyn` keyword
--> <source>:5:14
|
5 | fn fun() -> &Trait {
| ^^^^^
|
help: add `dyn` keyword before this trait
|
5 | fn fun() -> &dyn Trait {
| +++
error: aborting due to 2 previous errors
Some errors have detailed explanations: E0106, E0782.
For more information about an error, try `rustc --explain E0106`.
Rationale and extra context
The error E0106 suggests to add a static lifetime but this is incorrect. If and when #127692 is merged, the error E0782 can provide accurate and helpful messages and the former should be suppressed in favor of E0782.
But this can be tricky as E0106 is emitted at rustc_resolve
which doesn't have any context about type of values.
Rust Version
rustc 1.79.0
Anything else?
No response
Metadata
Metadata
Assignees
Labels
Area: Messages for errors, warnings, and lintsArea: trait objects, vtable layoutDiagnostics: A diagnostic that is giving misleading or incorrect information.Diagnostics: Too much output caused by a single piece of incorrect code.Relevant to the compiler team, which will review and decide on the PR/issue.
Type
Projects
Milestone
Relationships
Development
No branches or pull requests
Activity
impl Trait
for References to Bare Trait in Function Header #127692veera-sivarajan commentedon Jul 13, 2024
@rustbot label +D-verbose +D-incorrect +A-trait-objects
Rollup merge of rust-lang#127692 - veera-sivarajan:bugfix-125139, r=e…
Rollup merge of rust-lang#127692 - veera-sivarajan:bugfix-125139, r=e…
Rollup merge of rust-lang#127692 - veera-sivarajan:bugfix-125139, r=e…
Unrolled build for rust-lang#127692
GrigorenkoPV commentedon Oct 13, 2024
The message has changed a bit, maybe due to #131239.
The
'static
suggestion is still here.But now it also suggests
&impl Trait
, which is cool.The
&dyn Trait
suggestion got changed toBox<dyn Trait>
, which probably makes more sense, considering the function has no input lifetimes.veera-sivarajan commentedon Oct 13, 2024
Yeah, it's hard to prevent the
'static
suggestion because its from the resolver. Anyways, this looks good to me. Thank you for updating.