С учетом этого кода:
struct RefWrapper<'a, T> {
r: &'a T,
}
... компилятор жалуется:
ошибка: тип параметра
Tможет быть недостаточно длиннымрассмотрим возможность добавления явной привязки времени жизни
T: 'a, чтобы ссылочный тип&'a Tне переживал данные, на которые он указывает.
Я уже неоднократно видел эту ошибку, и до сих пор я просто слушал компилятор, и все получилось отлично. Однако, думая больше об этом, я не понимаю, зачем мне писать T: 'a.
Насколько я понимаю, уже невозможно получить такую ссылку. Имея &'a T, следует, что существует объект типа T, который живет как минимум 'a. Но мы не можем хранить ссылки в указанном объекте, которые указывают на данные, имеющие более короткий срок службы, чем 'a. Это уже привело бы к ошибке компилятора.
В этом смысле уже невозможно получить a &'a T, где T не переживает 'a. Таким образом, дополнительная аннотация (T: 'a) не нужна.
Я прав? Я ошибаюсь, и если да: как я могу сломать код, если T: 'a не требуется?
Ссылки: