Ответ погрешён в сообщении об ошибке:
существует метод
blockquote>clone
, но следующие ограничения параметров не выполнялись:T : std::clone::Clone
Когда вы получаете
Clone
(и многие другие автоматически производные типы), он добавляетClone
привязку к всем родовым типам. Используяrustc -Z unstable-options --pretty=expanded
, мы можем видеть, что это делается:impl <'a, T: ::std::clone::Clone + 'a> ::std::clone::Clone for Foo<'a, T> { #[inline] fn clone(&self) -> Foo<'a, T> { match *self { Foo { t: ref __self_0_0 } => Foo{t: ::std::clone::Clone::clone(&(*__self_0_0)),}, } } }
В этом случае оценка не нужна, потому что общий тип находится за ссылкой.
На данный момент вам нужно будет реализовать
Clone
самостоятельно. Для этого есть проблема с ржавчиной, но это сравнительно редкий случай с обходным способом.