45 lines
827 B
Rust
45 lines
827 B
Rust
// check-pass
|
|
|
|
#![allow(unused)]
|
|
|
|
trait MiniYokeable<'a> {
|
|
type Output;
|
|
}
|
|
|
|
struct MiniYoke<Y: for<'a> MiniYokeable<'a>> {
|
|
pub yokeable: Y,
|
|
}
|
|
|
|
fn map_project_broken<Y, P>(
|
|
source: MiniYoke<Y>,
|
|
f: impl for<'a> FnOnce(
|
|
<Y as MiniYokeable<'a>>::Output,
|
|
core::marker::PhantomData<&'a ()>,
|
|
) -> <P as MiniYokeable<'a>>::Output,
|
|
) -> MiniYoke<P>
|
|
where
|
|
Y: for<'a> MiniYokeable<'a>,
|
|
P: for<'a> MiniYokeable<'a>
|
|
{
|
|
unimplemented!()
|
|
}
|
|
|
|
struct Bar<'a> {
|
|
string_1: &'a str,
|
|
string_2: &'a str,
|
|
}
|
|
|
|
impl<'a> MiniYokeable<'a> for Bar<'static> {
|
|
type Output = Bar<'a>;
|
|
}
|
|
|
|
impl<'a> MiniYokeable<'a> for &'static str {
|
|
type Output = &'a str;
|
|
}
|
|
|
|
fn demo_broken(bar: MiniYoke<Bar<'static>>) -> MiniYoke<&'static str> {
|
|
map_project_broken(bar, |bar, _| bar.string_1)
|
|
}
|
|
|
|
fn main() {}
|