41 lines
943 B
Rust
41 lines
943 B
Rust
//@ run-pass
|
|
const CONST_REF: &[u8; 3] = b"foo";
|
|
|
|
trait Foo {
|
|
const CONST_REF_DEFAULT: &'static [u8; 3] = b"bar";
|
|
const CONST_REF: &'static [u8; 3];
|
|
}
|
|
|
|
impl Foo for i32 {
|
|
const CONST_REF: &'static [u8; 3] = b"jjj";
|
|
}
|
|
|
|
impl Foo for i64 {
|
|
const CONST_REF_DEFAULT: &'static [u8; 3] = b"ggg";
|
|
const CONST_REF: &'static [u8; 3] = b"fff";
|
|
}
|
|
|
|
// Check that (associated and free) const references are not mistaken for a
|
|
// non-reference pattern (in which case they would be auto-dereferenced, making
|
|
// the types mismatched).
|
|
|
|
fn const_ref() -> bool {
|
|
let f = b"foo";
|
|
match f {
|
|
CONST_REF => true,
|
|
_ => false,
|
|
}
|
|
}
|
|
|
|
fn associated_const_ref() -> bool {
|
|
match (b"bar", b"jjj", b"ggg", b"fff") {
|
|
(i32::CONST_REF_DEFAULT, i32::CONST_REF, i64::CONST_REF_DEFAULT, i64::CONST_REF) => true,
|
|
_ => false,
|
|
}
|
|
}
|
|
|
|
pub fn main() {
|
|
assert!(const_ref());
|
|
assert!(associated_const_ref());
|
|
}
|