pub static IMPLIED_BOUNDS_ENTAILMENT: &Lint
Expand description
The implied_bounds_entailment
lint detects cases where the arguments of an impl method
have stronger implied bounds than those from the trait method it’s implementing.
Example
ⓘ
#![deny(implied_bounds_entailment)]
trait Trait {
fn get<'s>(s: &'s str, _: &'static &'static ()) -> &'static str;
}
impl Trait for () {
fn get<'s>(s: &'s str, _: &'static &'s ()) -> &'static str {
s
}
}
let val = <() as Trait>::get(&String::from("blah blah blah"), &&());
println!("{}", val);
{{produces}}
Explanation
Neither the trait method, which provides no implied bounds about 's
, nor the impl,
requires the main function to prove that ’s: ’static, but the impl method is allowed
to assume that 's: 'static
within its own body.
This can be used to implement an unsound API if used incorrectly.