| #### This error code is internal to the compiler and will not be emitted with normal Rust code. |
| #### Note: this error code is no longer emitted by the compiler. |
| |
| This error code shows the variance of a type's generic parameters. |
| |
| Erroneous code example: |
| |
| ```compile_fail |
| // NOTE: this feature is perma-unstable and should *only* be used for |
| // testing purposes. |
| #![allow(internal_features)] |
| #![feature(rustc_attrs)] |
| |
| #[rustc_variance] |
| struct Foo<'a, T> { // error: deliberate error to display type's variance |
| t: &'a mut T, |
| } |
| ``` |
| |
| which produces the following error: |
| |
| ```text |
| error: [-, o] |
| --> <anon>:4:1 |
| | |
| 4 | struct Foo<'a, T> { |
| | ^^^^^^^^^^^^^^^^^ |
| ``` |
| |
| *Note that while `#[rustc_variance]` still exists and is used within the* |
| *compiler, it no longer is marked as `E0208` and instead has no error code.* |
| |
| This error is deliberately triggered with the `#[rustc_variance]` attribute |
| (`#![feature(rustc_attrs)]` must be enabled) and helps to show you the variance |
| of the type's generic parameters. You can read more about variance and |
| subtyping in [this section of the Rustonomicon]. For a more in depth look at |
| variance (including a more complete list of common variances) see |
| [this section of the Reference]. For information on how variance is implemented |
| in the compiler, see [this section of `rustc-dev-guide`]. |
| |
| This error can be easily fixed by removing the `#[rustc_variance]` attribute, |
| the compiler's suggestion to comment it out can be applied automatically with |
| `rustfix`. |
| |
| [this section of the Rustonomicon]: https://doc.rust-lang.org/nomicon/subtyping.html |
| [this section of the Reference]: https://doc.rust-lang.org/reference/subtyping.html#variance |
| [this section of `rustc-dev-guide`]: https://rustc-dev-guide.rust-lang.org/variance.html |