Hacker News new | ask | show | jobs
by Buttons840 925 days ago
Wouldn't fixing 10 just mean allowing things that were previously not allowed? That's not a breaking change. What am I missing?
1 comments

No it will not:

    fn requires_static(_: &'static str) {}
    
    let long_lifetime: &'static str = "";
    let closure = |_input: &str| -> &str { long_lifetime };
    let short_lifetime = &String::new();
    requires_static(closure(short_lifetime));
This code compiles currently as the returned `&str` is inferred to be `&'static str` because this is what it actually returns, but with #10 fixed it will not because lifetime elision rules say that the lifetime of the output is the same as the lifetime of the input.
Hm, in this case it's actually nice that this works because there's nothing unsafe or unexpected going on.