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
|
#![feature(type_alias_impl_trait)]
use std::marker::PhantomData;
trait Trait {
fn foo<T, U>(t: T) -> U;
}
trait ProofForConversion<X> {
fn convert<T, U>(_: PhantomData<Self>, r: T) -> U;
}
impl<X: Trait> ProofForConversion<X> for () {
fn convert<T, U>(_: PhantomData<Self>, r: T) -> U {
X::foo(r)
}
}
type Converter<T> = impl ProofForConversion<T>;
fn _defining_use<T: Trait>() -> Converter<T> {
()
//~^ ERROR the trait bound `T: Trait` is not satisfied
}
fn main() {
}
|