//@ known-bug: #130956 mod impl_trait_mod { use super::*; pub type OpaqueBlock = impl Trait; pub type OpaqueIf = impl Trait; pub struct BlockWrapper(OpaqueBlock); pub struct IfWrapper(pub OpaqueIf); pub fn if_impl() -> Parser { bind(option(block()), |_| block()) } } use impl_trait_mod::*; 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; }