// Regression test for #130956 #![feature(type_alias_impl_trait)] pub type OpaqueBlock = impl Trait; //~^ ERROR unconstrained opaque type pub type OpaqueIf = impl Trait; pub struct BlockWrapper(OpaqueBlock); pub struct IfWrapper(pub OpaqueIf); #[define_opaque(OpaqueIf)] pub fn if_impl() -> Parser { bind(option(block()), |_| block()) } pub trait Trait { type Assoc; } pub struct Parser

(P); pub struct Bind(P, F); impl Trait for Bind { type Assoc = (); } impl Trait for BlockWrapper { type Assoc = (); } impl Trait for IfWrapper { type Assoc = (); } pub fn block() -> Parser { loop {} } pub fn option(arg: Parser

) -> Parser { bind(arg, |_| block()) } fn bind Parser>(_: Parser

, _: F) -> Parser> { loop {} } fn main() { if_impl().0; }