//! This test checks that we do not need to implement //! members, whose `where Self: Sized` bounds don't hold for the impl type. trait Foo { fn foo() where Self: Sized; } impl Foo for () { fn foo() {} } // Must not be allowed impl Foo for i32 {} //~^ ERROR: not all trait items implemented, missing: `foo` impl Foo for dyn std::fmt::Debug {} #[deny(dead_code)] impl Foo for dyn std::fmt::Display { fn foo() {} //~^ ERROR this item cannot be used as its where bounds are not satisfied } struct Struct { i: i32, tail: [u8], } impl Foo for Struct {} // Ensure we only allow known-unsized types to be skipped trait Trait { fn foo(self) where Self: Sized; } impl Trait for T {} //~^ ERROR: not all trait items implemented, missing: `foo` fn main() {}