1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34
|
//@ check-pass
#![feature(type_alias_impl_trait)]
mod foo {
pub trait Foo {
// This was reachable in https://github.com/rust-lang/rust/issues/100800
fn foo(&self) {
unreachable!()
}
}
impl<T> Foo for T {}
pub struct B;
impl B {
fn foo(&self) {}
}
pub type Input = impl Foo;
fn bop() -> Input {
super::run1(|x: B| x.foo(), B);
super::run2(|x: B| x.foo(), B);
panic!()
}
}
use foo::*;
fn run1<F: FnOnce(Input)>(f: F, i: Input) {
f(i)
}
fn run2<F: FnOnce(B)>(f: F, i: B) {
f(i)
}
fn main() {}
|