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.