работает специализация
                  
                  
                  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> Они не пересекаются
Обсуждают сегодня