trait Shadow<'a> { type Bar<'a>; //~^ ERROR lifetime name `'a` shadows a lifetime name that is already in scope } trait NoShadow<'a> { type Bar<'b>; // OK } impl<'a> NoShadow<'a> for &'a u32 { type Bar<'a> = i32; //~^ ERROR lifetime name `'a` shadows a lifetime name that is already in scope } trait ShadowT { type Bar; //~^ ERROR the name `T` is already used } trait NoShadowT { type Bar; // OK } impl NoShadowT for Option { type Bar = i32; //~^ ERROR the name `T` is already used } fn main() {}