| //@ check-pass | |
| use std::marker::PhantomData; | |
| #[derive(Default)] | |
| struct MyType<'a> { | |
| field: usize, | |
| _phantom: PhantomData<&'a ()>, | |
| } | |
| #[derive(Default)] | |
| struct MyTypeVariant<'a> { | |
| field: usize, | |
| _phantom: PhantomData<&'a ()>, | |
| } | |
| trait AsVariantTrait { | |
| type Type; | |
| } | |
| impl<'a> AsVariantTrait for MyType<'a> { | |
| type Type = MyTypeVariant<'a>; | |
| } | |
| type Variant<G> = <G as AsVariantTrait>::Type; | |
| fn foo<T: Default, F: FnOnce(T)>(f: F) { | |
| let input = T::default(); | |
| f(input); | |
| } | |
| fn main() { | |
| foo(|a: <MyType as AsVariantTrait>::Type| { | |
| a.field; | |
| }); | |
| } |