# Error code E0128

A type parameter with default value is using forward declared identifier.

Erroneous code example:

    #![allow(unused)]
    fn main() {
    struct Foo<T = U, U = ()> {
        field1: T,
        field2: U,
    }
    // error: generic parameters with a default cannot use forward declared
    //        identifiers
    }

Type parameter defaults can only use parameters that occur before them. Since type parameters are evaluated in-order, this issue could be fixed by doing:

    #![allow(unused)]
    fn main() {
    struct Foo<U = (), T = U> {
        field1: T,
        field2: U,
    }
    }

Please also verify that this wasn't because of a name-clash and rename the type parameter if so.