Error code E0303

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:

#![allow(unused)] fn main() { match Some("hi".to_string()) { ref op_string_ref @ Some(s) => {}, None => {}, } }

After:

#![allow(unused)] fn main() { 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.