Rust errors / Types and traits
Rust compiler error · checked with rustc 1.99.0
Rust error E0409: variable `y` is bound inconsistently across alternatives separated by `|`
What it meansAn "or" pattern was used where the variable bindings are not consistently bound across patterns.
What rustc prints
error[E0409]: variable `y` is bound inconsistently across alternatives separated by `|`
--> main.rs:5:19
|
5 | (0, ref y) | (y, 0) => { /* use y */} // error: variable `y` is bound with
| - ^ bound in different ways
| |
| first bindingReal 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
An "or" pattern was used where the variable bindings are not consistently bound across patterns.
Erroneous code example:
let x = (0, 2);
match x {
(0, ref y) | (y, 0) => { /* use y */} // error: variable `y` is bound with
// different mode in pattern #2
// than in pattern #1
_ => ()
}
Here, y is bound by-value in one case and by-reference in the other.
To fix this error, just use the same mode in both cases. Generally using ref or ref mut where not already used will fix this:
let x = (0, 2);
match x {
(0, ref y) | (ref y, 0) => { /* use y */}
_ => ()
}
Alternatively, split the pattern:
let x = (0, 2);
match x {
(y, 0) => { /* use y */ }
(0, ref y) => { /* use y */}
_ => ()
}From rustc --explain E0409 (1.99.0), part of the Rust project, MIT or Apache-2.0. Official page.
Related errors
- E0308mismatched types
- E0277the trait bound is not satisfied
- E0599no method named X found in the current scope
- E0433failed to resolve
- E0407method `b` is not a member of trait `Foo`
- E0408variable `y` is not bound in all patterns
- E0411cannot find type `Self` in this scope
- E0415identifier `f` is bound more than once in this parameter list
Up next
Often hit nextE0308: mismatched typesA related error from the same family.Read it next →Did this answer your question?