This only includes previously existing tests (with a couple duplicates removed). I plan on adding more comprarisons where the rules differ once I've updated the pattern typing rules. I also haven't touched the tests for new rules in old editions; I'll see how best to handle that once those rules are updated as well.
31 lines
708 B
Rust
31 lines
708 B
Rust
//@ edition: 2024
|
|
//@ revisions: with_impl without_impl
|
|
//@[with_impl] run-pass
|
|
//! Sanity check that experimental new pattern typing rules work as expected with trait selection
|
|
|
|
fn main() {
|
|
fn generic<R: Ref>() -> (R, bool) {
|
|
R::meow()
|
|
}
|
|
|
|
trait Ref: Sized {
|
|
fn meow() -> (Self, bool);
|
|
}
|
|
|
|
#[cfg(with_impl)]
|
|
impl Ref for &'static [(); 0] {
|
|
fn meow() -> (Self, bool) {
|
|
(&[], false)
|
|
}
|
|
}
|
|
|
|
impl Ref for &'static mut [(); 0] {
|
|
fn meow() -> (Self, bool) {
|
|
(&mut [], true)
|
|
}
|
|
}
|
|
|
|
let (&_, b) = generic(); //[without_impl]~ ERROR: the trait bound `&_: main::Ref` is not satisfied [E0277]
|
|
assert!(!b);
|
|
}
|