Move E0210 to new error location

This commit is contained in:
Guillaume Gomez 2019-11-14 13:08:23 +01:00
parent bfa3d599eb
commit b5b2a8984e

View File

@ -1,8 +1,13 @@
This error indicates a violation of one of Rust's orphan rules for trait This error indicates a violation of one of Rust's orphan rules for trait
implementations. The rule concerns the use of type parameters in an implementations. The rule concerns the use of type parameters in an
implementation of a foreign trait (a trait defined in another crate), and implementation of a foreign trait (a trait defined in another crate), and
states that type parameters must be "covered" by a local type. To understand states that type parameters must be "covered" by a local type.
what this means, it is perhaps easiest to consider a few examples.
When implementing a foreign trait for a foreign type,
the trait must have one or more type parameters.
A type local to your crate must appear before any use of any type parameters.
To understand what this means, it is perhaps easier to consider a few examples.
If `ForeignTrait` is a trait defined in some external crate `foo`, then the If `ForeignTrait` is a trait defined in some external crate `foo`, then the
following trait `impl` is an error: following trait `impl` is an error:
@ -60,10 +65,18 @@ impl<P1, ..., Pm> ForeignTrait<T1, ..., Tn> for T0 { ... }
where `P1, ..., Pm` are the type parameters of the `impl` and `T0, ..., Tn` where `P1, ..., Pm` are the type parameters of the `impl` and `T0, ..., Tn`
are types. One of the types `T0, ..., Tn` must be a local type (this is another are types. One of the types `T0, ..., Tn` must be a local type (this is another
orphan rule, see the explanation for E0117). Let `i` be the smallest integer orphan rule, see the explanation for E0117).
such that `Ti` is a local type. Then no type parameter can appear in any of the
`Tj` for `j < i`. Both of the following must be true:
1. At least one of the types `T0..=Tn` must be a local type.
Let `Ti` be the first such type.
2. No uncovered type parameters `P1..=Pm` may appear in `T0..Ti`
(excluding `Ti`).
For information on the design of the orphan rules,
see [RFC 2451] and [RFC 1023].
For information on the design of the orphan rules, see [RFC 1023]. For information on the design of the orphan rules, see [RFC 1023].
[RFC 2451]: https://rust-lang.github.io/rfcs/2451-re-rebalancing-coherence.html
[RFC 1023]: https://github.com/rust-lang/rfcs/blob/master/text/1023-rebalancing-coherence.md [RFC 1023]: https://github.com/rust-lang/rfcs/blob/master/text/1023-rebalancing-coherence.md