diff options
| author | Guillaume Gomez <guillaume1.gomez@gmail.com> | 2015-04-15 12:31:56 +0200 |
|---|---|---|
| committer | Michael Sproul <micsproul@gmail.com> | 2015-04-18 08:45:50 +1000 |
| commit | 50f75f3e2a4b8cb5451acb15f8d469a222dafbf4 (patch) | |
| tree | cc54c898a3ae9371e625130bbd4d9d9e6c7cbbbe | |
| parent | 017bc44712b94d22165672fd546b7e084fc3b404 (diff) | |
| download | rust-50f75f3e2a4b8cb5451acb15f8d469a222dafbf4.tar.gz rust-50f75f3e2a4b8cb5451acb15f8d469a222dafbf4.zip | |
Add long diagnostics for "bind by-ref and by-move"
| -rw-r--r-- | src/librustc/diagnostics.rs | 49 |
1 files changed, 48 insertions, 1 deletions
diff --git a/src/librustc/diagnostics.rs b/src/librustc/diagnostics.rs index 24d920077d6..306d2cd102f 100644 --- a/src/librustc/diagnostics.rs +++ b/src/librustc/diagnostics.rs @@ -114,6 +114,54 @@ reference when using guards or refactor the entire expression, perhaps by putting the condition inside the body of the arm. "##, +E0009: r##" +In a pattern, all values that don't implement the `Copy` trait have to be bound +the same way. The goal here is to avoid binding simultaneously by-move and +by-ref. + +This limitation may be removed in a future version of Rust. + +Wrong example: + +``` +struct X { x: (), } + +let x = Some((X { x: () }, X { x: () })); +match x { + Some((y, ref z)) => {}, + None => panic!() +} +``` + +You have two solutions: +1. Bind the pattern's values the same way: + +``` +struct X { x: (), } + +let x = Some((X { x: () }, X { x: () })); +match x { + Some((ref y, ref z)) => {}, + // or Some((y, z)) => {} + None => panic!() +} +``` + +2. Implement the `Copy` trait for the X structure (however, please +keep in mind that the first solution should be preferred!): + +``` +#[derive(Clone, Copy)] +struct X { x: (), } + +let x = Some((X { x: () }, X { x: () })); +match x { + Some((y, ref z)) => {}, + None => panic!() +} +``` +"##, + E0015: r##" The only function calls allowed in static or constant expressions are enum variant constructors or struct constructors (for unit or tuple structs). This @@ -343,7 +391,6 @@ a compile-time constant. } register_diagnostics! { - E0009, E0010, E0011, E0012, |
