# Error code E0208

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

    #![allow(unused)]
    fn main() {
    // 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:

    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`.