работает специализация
generic трейта с generic структурой в качестве аргумента (см. *1*).
В целом это конечно очень удобно, но не понимаю почему оно работает,
тогда как специализация для не-generic структуры не компилится (см. *2*),
как и специализация не-generic трейта не компилится (см. *3*).
trait Trait<T> {};
struct A;
struct B<T>(T);
struct Foo;
struct Bar<T>(T);
impl<T> Trait<T> for A {}
impl<T> Trait<Bar<T>> for A {} // ожидаемо ошибка. (*2*)
impl<T> Trait<T> for B<T> {}
impl<T> Trait<Bar<T>> for B<T> {} // ок, но почему? (*1*)
impl<T> Trait<Foo> for B<T> {} // ожидаемо ошибка. (*3*)
Trait<T> for B<T> Trait<Bar<T>> for B<T> Они не пересекаются
Обсуждают сегодня