о гарантиях
Sep. 12th, 2019 11:13 am![[personal profile]](https://www.dreamwidth.org/img/silk/identity/user.png)
fn helper<'a, 'b, T>(_: &'a &'b (), v: &'b T) -> &'a T { v } /// Turn any `&T` into a `&'static T`. May introduce undefined behavior. pub fn make_static<'a, T>(input: &'a T) -> &'static T { let f: fn(_, &'a T) -> &'static T = helper; f(&&(), input) }
(отсюда)
Не ожидал, что так просто. Безо всякого unsafe берем и превращаем "одолженную" ссылку на временное значение в "вечную", с соответствующими use-after-free последствиями. А просто дырка в borrow checker'e, и давно уже, все никак не залатают.
no subject
Date: 2019-09-13 09:26 am (UTC)