Closed as not planned
Description
I tried this code:
#![allow(dead_code)]
pub type Borrow<'a, T: 'a> = &'a T;
pub trait Foo {
fn foo(&self);
}
impl<T: AsRef<str> + ?Sized> Foo for T {
fn foo(&self) {}
}
pub struct Bar<'a> {
foo: Borrow<'a, dyn Foo>,
}
fn bar(name: &str) {
let _ = Bar { foo: &name };
}
I expected to see this happen:
error[E0759]: `name` has an anonymous lifetime `'_` but it needs to satisfy a `'static` lifetime requirement
--> src/lib.rs:18:24
|
17 | fn bar(name: &str) {
| ---- this data with an anonymous lifetime `'_`...
18 | let _ = Bar { foo: &name };
| ^^^^^ ...is used and required to live as long as `'static` here
For more information about this error, try `rustc --explain E0759`.
Borrow<'a, dyn Foo>
should default to dyn Foo + 'static
and the T: 'a
should be ignored.
Instead, this happened:
warning: bounds on generic parameters are not enforced in type aliases
--> src/lib.rs:3:24
|
3 | pub type Borrow<'a, T: 'a> = &'a T;
| ^^
|
= note: `#[warn(type_alias_bounds)]` on by default
help: the bound will not be checked when the type alias is used, and should be removed
|
3 - pub type Borrow<'a, T: 'a> = &'a T;
3 + pub type Borrow<'a, T> = &'a T;
|
If you follow the guidance from the warning, it no longer compiles due to dyn Foo
being static-ish, as mentioned