pub static OPAQUE_HIDDEN_INFERRED_BOUND: &LintExpand description
The opaque_hidden_inferred_bound lint detects cases in which nested
impl Trait in associated type bounds are not written generally enough
to satisfy the bounds of the associated type.
§Explanation
This functionality was removed in #97346, but then rolled back in #99860 because it caused regressions.
We plan on reintroducing this as a hard error, but in the meantime, this lint serves to warn and suggest fixes for any use-cases which rely on this behavior.
§Example
#![feature(type_alias_impl_trait)]
trait Duh {}
impl Duh for i32 {}
trait Trait {
type Assoc: Duh;
}
impl<F: Duh> Trait for F {
type Assoc = F;
}
type Tait = impl Sized;
#[define_opaque(Tait)]
fn test() -> impl Trait<Assoc = Tait> {
42
}
fn main() {}{{produces}}
In this example, test declares that the associated type Assoc for
impl Trait is impl Sized, which does not satisfy the bound Duh
on the associated type.
Although the hidden type, i32 does satisfy this bound, we do not
consider the return type to be well-formed with this lint. It can be
fixed by changing Tait = impl Sized into Tait = impl Sized + Duh.