Repository navigation
Account for type param in '_ constraint for returned trait suggestion #73497
Copy link
Copy link
Closed
Labels
A-diagnosticsArea: Messages for errors, warnings, and lintsArea: Messages for errors, warnings, and lintsA-suggestion-diagnosticsArea: Suggestions generated by the compiler applied by `cargo fix`Area: Suggestions generated by the compiler applied by `cargo fix`D-newcomer-roadblockDiagnostics: Confusing error or lint; hard to understand for new users.Diagnostics: Confusing error or lint; hard to understand for new users.D-terseDiagnostics: An error or lint that doesn't give enough information about the problem at hand.Diagnostics: An error or lint that doesn't give enough information about the problem at hand.P-lowLow priorityLow priorityT-compilerRelevant to the compiler team, which will review and decide on the PR/issue.Relevant to the compiler team, which will review and decide on the PR/issue.
Description
rust/src/test/ui/issues/issue-16922.rs
Lines 1 to 6 in f7a1f97
| use std::any::Any; | |
| fn foo<T: Any>(value: &T) -> Box<dyn Any> { | |
| Box::new(value) as Box<dyn Any> | |
| //~^ ERROR cannot infer an appropriate lifetime | |
| } |
we currently output
rust/src/test/ui/issues/issue-16922.stderr
Lines 1 to 12 in f7a1f97
| error[E0759]: cannot infer an appropriate lifetime | |
| --> $DIR/issue-16922.rs:4:14 | |
| | | |
| LL | fn foo<T: Any>(value: &T) -> Box<dyn Any> { | |
| | -- this data with an anonymous lifetime `'_`... | |
| LL | Box::new(value) as Box<dyn Any> | |
| | ^^^^^ ...is captured here, requiring it to live as long as `'static` | |
| | | |
| help: to declare that the trait object captures data from argument `value`, you can add an explicit `'_` lifetime bound | |
| | | |
| LL | fn foo<T: Any>(value: &T) -> Box<dyn Any + '_> { | |
| | ^^^^ |
The suggestion is incomplete and will not result in compilable code. Because the lifetime is coming from an argument of type T, which is an unconstrained type parameter, T itself will not have the needed lifetime and causes the 'static obligation that we're trying to reverse by suggesting '_. The appropriate changes to the code would be either fn foo<'a, T: Any + 'a>(value: &'a T) -> Box<dyn Any + 'a> or fn foo(value: &dyn Any) -> Box<dyn Any + '_>, depending on whether T appears in any other argument or not.
Reactions are currently unavailable
Metadata
Metadata
Assignees
Labels
A-diagnosticsArea: Messages for errors, warnings, and lintsArea: Messages for errors, warnings, and lintsA-suggestion-diagnosticsArea: Suggestions generated by the compiler applied by `cargo fix`Area: Suggestions generated by the compiler applied by `cargo fix`D-newcomer-roadblockDiagnostics: Confusing error or lint; hard to understand for new users.Diagnostics: Confusing error or lint; hard to understand for new users.D-terseDiagnostics: An error or lint that doesn't give enough information about the problem at hand.Diagnostics: An error or lint that doesn't give enough information about the problem at hand.P-lowLow priorityLow priorityT-compilerRelevant to the compiler team, which will review and decide on the PR/issue.Relevant to the compiler team, which will review and decide on the PR/issue.
Activity
estebank commentedon Sep 28, 2023
The suggested code works since 1.64.
Apply structured suggestion that allows test to work since 1.64
Apply structured suggestion that allows test to work since 1.64
Apply structured suggestion that allows test to work since 1.64
Apply structured suggestion that allows test to work since 1.64
Apply structured suggestion that allows test to work since 1.64
Apply structured suggestion that allows test to work since 1.64
Rollup merge of rust-lang#116244 - estebank:issue-73497, r=b-naber
Unrolled build for rust-lang#116244