34e5a4992c
This unfortunately requires some winnowing hacks to avoid now ambiguous candidates.
26 lines
369 B
Rust
26 lines
369 B
Rust
// check-pass
|
|
|
|
#![allow(dead_code)]
|
|
|
|
trait MultiDispatch<T> {
|
|
type O;
|
|
}
|
|
|
|
trait Trait: Sized {
|
|
type A: MultiDispatch<Self::B, O = Self>;
|
|
type B;
|
|
|
|
fn new<U>(u: U) -> <Self::A as MultiDispatch<U>>::O
|
|
where
|
|
Self::A: MultiDispatch<U>;
|
|
}
|
|
|
|
fn test<T: Trait<B = i32>>(b: i32) -> T
|
|
where
|
|
T::A: MultiDispatch<i32>,
|
|
{
|
|
T::new(b)
|
|
}
|
|
|
|
fn main() {}
|