Error code E0747
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:
#![allow(unused)]
fn main() {
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:
#![allow(unused)]
fn main() {
struct S<'a, T>(&'a T);
type X = S<'static, ()>; // ok
}
Another erroneous code example:
#![allow(unused)]
fn main() {
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:
#![allow(unused)]
fn main() {
struct Foo<const N: usize>;
fn foo() -> Foo<3> { Foo }
}