| Generic arguments were not provided in the same order as the corresponding | |
| generic parameters are declared, or a type was provided when a constant | |
| was expected. | |
| Erroneous code example: | |
| ```compile_fail,E0747 | |
| struct S<'a, T>(&'a T); | |
| type X = S<(), 'static>; // error: the type argument is provided before the | |
| // lifetime argument | |
| ``` | |
| The argument order should be changed to match the parameter declaration | |
| order, as in the following: | |
| ``` | |
| struct S<'a, T>(&'a T); | |
| type X = S<'static, ()>; // ok | |
| ``` | |
| Another erroneous code example: | |
| ```compile_fail,E0747 | |
| struct Foo<const N: usize>; | |
| fn foo() -> Foo<usize> {} // error: type provided when a constant was | |
| // expected | |
| ``` | |
| A constant expression must be provided when a constant generic parameter | |
| is declared, not a type, as in the following: | |
| ``` | |
| struct Foo<const N: usize>; | |
| fn foo() -> Foo<3> { Foo } | |
| ``` |