//@ build-pass // The ICE didn't happen with `cargo check` but `cargo build`. use std::marker::PhantomData; trait Owned<'a> { type Reader; } impl<'a> Owned<'a> for () { type Reader = (); } trait Handler { fn handle(&self); } struct CtxHandlerWithoutState { message_type: PhantomData, _function: F, } impl CtxHandlerWithoutState { pub fn new(_function: F) -> Self { Self { message_type: PhantomData, _function, } } } impl<'a, M, F> Handler for CtxHandlerWithoutState where F: Fn(>::Reader), M: Owned<'a>, { fn handle(&self) {} } fn e_to_i Owned<'a>>(_: >::Reader) {} fn send_external_to_internal() where M: for<'a> Owned<'a>, { let _: Box = Box::new(CtxHandlerWithoutState::::new(e_to_i::)); } fn main() { send_external_to_internal::<()>() }