| Something other than numbers and characters has been used for a range. | |
| Erroneous code example: | |
| ```compile_fail,E0029 | |
| 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. |