Rust errors / Ownership and borrowing
Rust compiler error · checked with rustc 1.99.0
Rust error E0392: type parameter `T` is never used
What it meansA type or lifetime parameter has been declared but is not actually used.
What rustc prints
error[E0392]: type parameter `T` is never used --> main.rs:1:10 | 1 | enum Foo<T> { | ^ unused type parameter | = help: consider removing `T`, referring to it in a field, or using a marker such as `PhantomData` = help: if you intended `T` to be a const parameter, use `const T: /* Type */` instead
Real output of rustc 1.99.0 compiling the official example below (2021 edition). Your names and line numbers will differ; the first line is the part to match.
The compiler team's explanation
A type or lifetime parameter has been declared but is not actually used.
Erroneous code example:
enum Foo<T> {
Bar,
}
If the type parameter was included by mistake, this error can be fixed by simply removing the type parameter, as shown below:
enum Foo {
Bar,
}
Alternatively, if the type parameter was intentionally inserted, it must be used. A simple fix is shown below:
enum Foo<T> {
Bar(T),
}
This error may also commonly be found when working with unsafe code. For example, when using raw pointers one may wish to specify the lifetime for which the pointed-at data is valid. An initial attempt (below) causes this error:
struct Foo<'a, T> {
x: *const T,
}
We want to express the constraint that Foo should not outlive 'a, because the data pointed to by T is only valid for that lifetime. The problem is that there are no actual uses of 'a. It's possible to work around this by adding a PhantomData type to the struct, using it to tell the compiler to act as if the struct contained a borrowed reference &'a T:
use std::marker::PhantomData;
struct Foo<'a, T: 'a> {
x: *const T,
phantom: PhantomData<&'a T>
}
PhantomData can also be used to express information about unused type parameters.
From rustc --explain E0392 (1.99.0), part of the Rust project, MIT or Apache-2.0. Official page.
Related errors
- E0382borrow of moved value
- E0499cannot borrow as mutable more than once at a time
- E0502cannot borrow as mutable because it is also borrowed as immutable
- E0106missing lifetime specifier
- E0384cannot assign twice to immutable variable
- E0476lifetime of the source pointer does not outlive lifetime bound of the object type
- E0478A lifetime bound was not satisfied
Up next
Often hit nextE0382: borrow of moved valueA related error from the same family.Read it next →Did this answer your question?