Change:
<ins> error[E0581]: return type references an anonymous lifetime, which is not constrained by the fn input types --> $DIR/constrain_inputs.rs:6:31 | LL |     fn execute(ty: Ty<'_>) -> &str { todo!() } |                               ^^^^ | = note: lifetimes appearing in an associated or opaque type are not considered constrained = note: consider introducing a named lifetime parameter error[E0581]: return type references an anonymous lifetime, which is not constrained by the fn input types --> $DIR/constrain_inputs.rs:9:35 | LL |     type BadFnSig = fn(Ty<'_>) -> &str; |                                   ^^^^ | = note: lifetimes appearing in an associated or opaque type are not considered constrained = note: consider introducing a named lifetime parameter error[E0582]: binding for associated type `Output` references an anonymous lifetime, which does not appear in the trait input types --> $DIR/constrain_inputs.rs:11:42 | LL |     type BadTraitRef = dyn Fn(Ty<'_>) -> &str; |                                          ^^^^ | = note: lifetimes appearing in an associated or opaque type are not considered constrained = note: consider introducing a named lifetime parameter error[E0581]: return type references an anonymous lifetime, which is not constrained by the fn input types --> $DIR/constrain_inputs.rs:18:31 | LL |     fn execute(ty: Ty<'_>) -> &str { ty() } |                               ^^^^ | = note: lifetimes appearing in an associated or opaque type are not considered constrained = note: consider introducing a named lifetime parameter error[E0581]: return type references an anonymous lifetime, which is not constrained by the fn input types --> $DIR/constrain_inputs.rs:27:37 | LL |     type BadFnSig = fn(Ty<&str>) -> &str; |                                     ^^^^ | = note: lifetimes appearing in an associated or opaque type are not considered constrained = note: consider introducing a named lifetime parameter error[E0582]: binding for associated type `Output` references an anonymous lifetime, which does not appear in the trait input types --> $DIR/constrain_inputs.rs:29:44 | LL |     type BadTraitRef = dyn Fn(Ty<&str>) -> &str; |                                            ^^^^ | = note: lifetimes appearing in an associated or opaque type are not considered constrained = note: consider introducing a named lifetime parameter error: aborting due to 6 previous errors Some errors have detailed explanations: E0581, E0582. For more information about an error, try `rustc --explain E0581`. </ins>

Discussion:
<!-- Thank you for filing a bug report! Please provide a short summary of the bug, along with any information you feel relevant to replicating the bug. --. Prior to , these types were rejected with this error: Currently, they're accepted. Based on the assumption that generic parameters on opaque type are not constrained (see Niko's comment ), I believe the previous behavior is correct. CC: label F-typealiasimpl_trait A-impl-trait T-compiler A-lifetimes
Out of curiosity, here's an exploit derived from . It type-checks but fails at monomorphization.
The above exploit is and should be easier to do with , where indirection through would not be necessary, so label I-unsound requires-nightly T-types
if the same code were written without lifetime params and used arguments instead, we'd see the same problem before , right?
Sorry, I've clearly missed the notification :sweat_smile:. I think you already know the answer given that you've just pushed a fix :).