| #### 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 |