summaryrefslogtreecommitdiffstats
path: root/compiler/rustc_error_codes/src/error_codes/E0029.md
diff options
context:
space:
mode:
Diffstat (limited to 'compiler/rustc_error_codes/src/error_codes/E0029.md')
-rw-r--r--compiler/rustc_error_codes/src/error_codes/E0029.md26
1 files changed, 26 insertions, 0 deletions
diff --git a/compiler/rustc_error_codes/src/error_codes/E0029.md b/compiler/rustc_error_codes/src/error_codes/E0029.md
new file mode 100644
index 000000000..d12d85b9b
--- /dev/null
+++ b/compiler/rustc_error_codes/src/error_codes/E0029.md
@@ -0,0 +1,26 @@
+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.