1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58
|
// gate-test-deref_patterns
fn main() {
match Box::new(0) {
deref!(0) => {}
//~^ ERROR: use of unstable library feature `deref_patterns`: placeholder syntax for deref patterns
_ => {}
}
match Box::new(0) {
0 => {}
//~^ ERROR: mismatched types
_ => {}
}
// `deref_patterns` allows string and byte string literals to have non-ref types.
match *"test" {
"test" => {}
//~^ ERROR: mismatched types
_ => {}
}
match *b"test" {
b"test" => {}
//~^ ERROR: mismatched types
_ => {}
}
match *(b"test" as &[u8]) {
b"test" => {}
//~^ ERROR: mismatched types
_ => {}
}
// `deref_patterns` allows string and byte string patterns to implicitly peel references.
match &"str" {
"str" => {}
//~^ ERROR: mismatched types
_ => {}
}
match &b"str" {
b"str" => {}
//~^ ERROR: mismatched types
_ => {}
}
match "str".to_owned() {
"str" => {}
//~^ ERROR: mismatched types
_ => {}
}
// `deref_patterns` allows string and byte string patterns to match on mutable references.
// See also `tests/ui/pattern/byte-string-mutability-mismatch.rs`.
if let "str" = &mut *"str".to_string() {}
//~^ ERROR mismatched types
if let b"str" = &mut b"str".clone() {}
//~^ ERROR mismatched types
if let b"str" = &mut b"str".clone()[..] {}
//~^ ERROR mismatched types
}
|