36 lines
736 B
Rust
36 lines
736 B
Rust
//@ check-pass
|
|
|
|
trait Yokeable<'a> {
|
|
type Output: 'a;
|
|
}
|
|
impl<'a> Yokeable<'a> for () {
|
|
type Output = ();
|
|
}
|
|
|
|
trait DataMarker<'data> {
|
|
type Yokeable: for<'a> Yokeable<'a>;
|
|
}
|
|
impl<'data> DataMarker<'data> for () {
|
|
type Yokeable = ();
|
|
}
|
|
|
|
struct DataPayload<'data, M>(&'data M);
|
|
|
|
impl DataPayload<'static, ()> {
|
|
pub fn map_project_with_capture<M2, T>(
|
|
_: for<'a> fn(
|
|
capture: T,
|
|
std::marker::PhantomData<&'a ()>,
|
|
) -> <M2::Yokeable as Yokeable<'a>>::Output,
|
|
) -> DataPayload<'static, M2>
|
|
where
|
|
M2: DataMarker<'static>,
|
|
{
|
|
todo!()
|
|
}
|
|
}
|
|
|
|
fn main() {
|
|
let _: DataPayload<()> = DataPayload::<()>::map_project_with_capture::<_, &()>(|_, _| todo!());
|
|
}
|