2024-09-19 01:31:48 +00:00
|
|
|
#![feature(supertrait_item_shadowing)]
|
|
|
|
#![warn(supertrait_item_shadowing_usage)]
|
2025-01-25 17:14:33 +00:00
|
|
|
#![warn(supertrait_item_shadowing_definition)]
|
2024-09-19 01:31:48 +00:00
|
|
|
|
|
|
|
struct W<T>(T);
|
|
|
|
|
|
|
|
trait Upstream {
|
|
|
|
fn hello(&self) {}
|
|
|
|
}
|
|
|
|
impl<T> Upstream for T {}
|
|
|
|
|
|
|
|
trait Downstream: Upstream {
|
|
|
|
fn hello(&self) {}
|
2025-01-25 17:14:33 +00:00
|
|
|
//~^ WARN trait item `hello` from `Downstream` shadows identically named item
|
2024-09-19 01:31:48 +00:00
|
|
|
}
|
|
|
|
impl<T> Downstream for W<T> where T: Foo {}
|
|
|
|
|
|
|
|
trait Foo {}
|
|
|
|
|
|
|
|
fn main() {
|
|
|
|
let x = W(Default::default());
|
|
|
|
x.hello();
|
|
|
|
//~^ ERROR the trait bound `i32: Foo` is not satisfied
|
|
|
|
//~| WARN trait item `hello` from `Downstream` shadows identically named item from supertrait
|
|
|
|
let _: i32 = x.0;
|
|
|
|
}
|