Ошибка E0201 при реализации внешней черты для локального типа с параметром - PullRequest
0 голосов
/ 28 января 2019

Я пытаюсь добавить параметр типа C к этому коду ( детская площадка ):

use std::ops::Index;

struct ConnectionHandle(usize);
struct Connection<C>(C);

impl<C> Index<ConnectionHandle> for Vec<Connection<C>> {
    type Output = Connection<C>;
    fn index(&self, ch: ConnectionHandle) -> &Self::Output {
        &self[ch.0]
    }
}

Но это приводит к появлению этого сообщения об ошибке:

error[E0210]: type parameter `C` must be used as the type parameter for some local type (e.g. `MyStruct<C>`)
 --> src/lib.rs:6:1
  |
6 | impl<C> Index<ConnectionHandle> for Vec<Connection<C>> {
  | ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ type parameter `C` must be used as the type parameter for some local type
  |
  = note: only traits defined in the current crate can be implemented for a type parameter

Почему это не разрешено?Connection является локальным, поэтому согласно объяснению для E0201 кажется, что это не должно приводить к сиротам.

1 Ответ

0 голосов
/ 30 января 2019

Проблема в том, что Vec<Connection<C>> не считается локальным типом, поскольку Vec не является локальным (и не является фундаментальным ).

RFC2451 сделает его законным, однако. Реализация была объединена 4 января, поэтому она еще не работает стабильно, но работает ночью, если включена функция re_rebalance_coherence.

...