По-видимому, все еще существует некоторая путаница в отношении того, что именно здесь происходит, поэтому я постараюсь перевести мои комментарии в короткий ответ.
Проблема здесь в прототипе функции map()
:
fn map(i: &str) -> impl '_ + IntoState
Указывает, что типом возврата map()
является некоторый тип, реализующий IntoState
, с неопределенным связанным типом State
. Возвращаемый тип имеет параметр времени жизни с временем жизни аргумента i
; давайте назовем это время жизни 'a
, а полный тип возврата T<'a>
. Связанный тип State
этого типа возврата теперь равен <T<'a> as IntoState>::State
, который параметризован 'a
. В настоящее время компилятор не может удалить этот параметр времени жизни из ассоциированного типа, несмотря на объявление 'static
в определении черты. Если явно указать связанный тип как String
, компилятор будет просто использовать явно указанный тип String
вместо <T<'a> as IntoState>::State
, поэтому параметр времени жизни пропадет, и мы больше не получим ошибку.
Этот недостаток компилятора обсуждается в этой проблеме Github .