rust/tests/ui/methods/method-recursive-blanket-impl.rs
许杰友 Jieyou Xu (Joe) 95ff642797 tests: remove //@ pretty-expanded usages
Done with

```bash
sd '//@ pretty-expanded.*\n' '' tests/ui/**/*.rs
```

and

```
sd '//@pretty-expanded.*\n' '' tests/ui/**/*.rs
```
2024-11-26 02:50:48 +08:00

41 lines
777 B
Rust

//@ run-pass
#![allow(unused_variables)]
#![allow(unused_imports)]
// Test that we don't trigger on the blanket impl for all `&'a T` but
// rather keep autoderefing and trigger on the underlying impl. To
// know not to stop at the blanket, we have to recursively evaluate
// the `T:Foo` bound.
use std::marker::Sized;
// Note: this must be generic for the problem to show up
trait Foo<A> { //~ WARN trait `Foo` is never used
fn foo(&self, a: A);
}
impl Foo<u8> for [u8] {
fn foo(&self, a: u8) {}
}
impl<'a, A, T> Foo<A> for &'a T where T: Foo<A> {
fn foo(&self, a: A) {
Foo::foo(*self, a)
}
}
trait Bar {
fn foo(&self);
}
struct MyType;
impl Bar for MyType {
fn foo(&self) {}
}
fn main() {
let mut m = MyType;
(&mut m).foo()
}