| #### Note: this error code is no longer emitted by the compiler. | |
| Sub-bindings, e.g. `ref x @ Some(ref y)` are now allowed under | |
| `#![feature(bindings_after_at)]` and checked to make sure that | |
| memory safety is upheld. | |
| -------------- | |
| In certain cases it is possible for sub-bindings to violate memory safety. | |
| Updates to the borrow checker in a future version of Rust may remove this | |
| restriction, but for now patterns must be rewritten without sub-bindings. | |
| Before: | |
| ```compile_fail | |
| match Some("hi".to_string()) { | |
| ref op_string_ref @ Some(s) => {}, | |
| None => {}, | |
| } | |
| ``` | |
| After: | |
| ``` | |
| match Some("hi".to_string()) { | |
| Some(ref s) => { | |
| let op_string_ref = &Some(s); | |
| // ... | |
| }, | |
| None => {}, | |
| } | |
| ``` | |
| The `op_string_ref` binding has type `&Option<&String>` in both cases. | |
| See also [Issue 14587][issue-14587]. | |
| [issue-14587]: https://github.com/rust-lang/rust/issues/14587 |