Rust errors / Types and traits
Rust compiler error · checked with rustc 1.99.0
Rust error E0029: only `char` and numeric types are allowed in range patterns
What it meansSomething other than numbers and characters has been used for a range.
What rustc prints
error[E0029]: only `char` and numeric types are allowed in range patterns
--> main.rs:8:5
|
8 | "hello" ..= "world" => {}
| -------^^^^^-------
| | |
| | this is of type `&'static str` but it should be `char` or numeric
| this is of type `&'static str` but it should be `char` or numericReal 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
Something other than numbers and characters has been used for a range.
Erroneous code example:
let string = "salutations !";
// The ordering relation for strings cannot be evaluated at compile time,
// so this doesn't work:
match string {
"hello" ..= "world" => {}
_ => {}
}
// This is a more general version, using a guard:
match string {
s if s >= "hello" && s <= "world" => {}
_ => {}
}
In a match expression, only numbers and characters can be matched against a range. This is because the compiler checks that the range is non-empty at compile-time, and is unable to evaluate arbitrary comparison functions. If you want to capture values of an orderable type between two end-points, you can use a guard.
From rustc --explain E0029 (1.99.0), part of the Rust project, MIT or Apache-2.0. Official page.
Related errors
Up next
Often hit nextE0308: mismatched typesA related error from the same family.Read it next →Did this answer your question?