Ответ 1
Это часть правил корректности. Тип &'a T
является только корректным, если T: 'a
( "T переживает" a ", это необходимо, потому что у нас есть ссылка, с которой мы можем получить доступ в области 'a
; указанное значение в T
должен быть действительным, по крайней мере, для этой области).
struct RefWrapper<'a, T>
- это общий тип, и он говорит, что вы можете ввести время жизни 'x
и тип U
и вернуть тип RefWrapper<'x, U>
. Однако этот тип не обязательно хорошо сформирован или даже реализован, если не соблюдается требование T: 'a
.
Это требование исходит из детали реализации; это не обязательно, так что T
и 'a
используются вместе, как &'a T
в внутренних структурах. Требование стробирования скважины необходимо продвигать в открытый интерфейс структуры RefWrapper
, так что требования к формированию типа RefWrapper<'_, _>
являются общедоступными, даже если внутренняя реализация не является.
(Есть другие места, где возвращается одно и то же требование T: 'a
, но подразумевается:
pub fn foo<'a, T>(x: &'a T) { }
мы заметим разницу: здесь тип &'a T
тоже является частью публичного api.)