// Test for diagnostics when we have mismatched lifetime due to implict 'static lifetime in GATs // check-fail #![feature(generic_associated_types)] pub trait A {} impl A for &dyn A {} impl A for Box {} pub trait B { type T<'a>: A; } impl B for () { // `'a` doesn't match implicit `'static`: suggest `'_` type T<'a> = Box; //~ incompatible lifetime on type } trait C {} impl C for Box {} pub trait D { type T<'a>: C; } impl D for () { // `'a` doesn't match explicit `'static`: we *should* suggest removing `'static` type T<'a> = Box; //~ incompatible lifetime on type } trait E {} impl E for (Box, Box) {} pub trait F { type T<'a>: E; } impl F for () { // `'a` doesn't match explicit `'static`: suggest `'_` type T<'a> = (Box, Box); //~ incompatible lifetime on type } fn main() {}