In an impl, Self would be allowed and would be an alias to the concrete type. E.g.,
impl Foo for int {
fn f(x: Self) -> Self { ... }
}
Both uses of Self would be equivalent to using int.
The motivation is for macros. I would like to allow procedural macros to modify methods as well as functions, but you often need to use the concrete type for this. To do so you either need to pass the concrete type to the macro (which I find a bit hackey) or allow Self to be used in impls. This option definitely makes making the macros and implementing the macro expansion in compiler easier. I’m not really sure if it is a good thing or a bad thing for the language.