struct S; trait Tr { fn f() { let s = Self {}; //~^ ERROR expected struct, variant or union type, found type parameter let z = Self:: {}; //~^ ERROR expected struct, variant or union type, found type parameter //~| ERROR type arguments are not allowed on self type match s { Self { .. } => {} //~^ ERROR expected struct, variant or union type, found type parameter } } } impl Tr for S { fn f() { let s = Self {}; // OK let z = Self:: {}; //~ ERROR type arguments are not allowed on self type match s { Self { .. } => {} // OK } } } impl S { fn g() { let s = Self {}; // OK let z = Self:: {}; //~ ERROR type arguments are not allowed on self type match s { Self { .. } => {} // OK } } } fn main() {}