@blp I believe this mostly comes down to variance and drop checking. Rust infers variance and "dropck" based on the usage of `T` in data structures. This doesn't apply to `fn`s, since they cannot interact with or "store" `T` directly but only via parameters.

See https://doc.rust-lang.org/nomicon/subtyping.html