T, после чего делаю impl<T> ParseMessage for Box<T> - раст ругается на конфликтующие имплементации? Если делать для Rc<T>, к примеру, то ничего не конфликтует
потому что Box<T> это тоже некоторый T
deref ?
Да, забыл уточнить В обеих имплементациях я указываю, что T должен реализовывать трейт Parseable
Но у Rc тоже есть Deref, на него не ругается
error[E0119]: conflicting implementations of trait `Tr` for type `Rc<_>` --> src/main.rs:15:1 | 14 | impl<T> Tr for T {} | ---------------- first implementation here 15 | impl<T> Tr for Rc<T> {} | ^^^^^^^^^^^^^^^^^^^^ conflicting implementation for `Rc<_>`
Fundamental type constructors A fundamental type constructor is a type where implementing a blanket implementation over it is a breaking change. &, &mut, Box, and Pin are fundamental. Any time a type T is considered local, &T, &mut T, Box<T>, and Pin<T> are also considered local. Fundamental type constructors cannot cover other types. Any time the term "covered type" is used, the T in &T, &mut T, Box<T>, and Pin<T> is not considered covered. https://doc.rust-lang.org/reference/glossary.html#fundamental-type-constructors Ты не сможешь для этих 4 типов реализацию сделать совместимую с for T
Обсуждают сегодня