2019-07-02 16:30:28 -05:00
|
|
|
// build-pass (FIXME(62277): could be check-pass?)
|
2018-12-15 16:00:46 -06:00
|
|
|
|
2018-12-17 16:33:21 -06:00
|
|
|
// Regression test related to #56288. Check that a supertrait projection (of
|
|
|
|
// `Output`) that references `Self` can be ok if it is referencing a projection (of
|
|
|
|
// `Self::Target`, in this case). Note that we still require the user to manually
|
|
|
|
// specify both `Target` and `Output` for now.
|
|
|
|
|
2018-12-15 16:00:46 -06:00
|
|
|
trait Base {
|
|
|
|
type Output;
|
|
|
|
}
|
|
|
|
|
|
|
|
trait Helper: Base<Output=<Self as Helper>::Target> {
|
|
|
|
type Target;
|
|
|
|
}
|
|
|
|
|
|
|
|
impl Base for u32
|
|
|
|
{
|
|
|
|
type Output = i32;
|
|
|
|
}
|
|
|
|
|
|
|
|
impl Helper for u32
|
|
|
|
{
|
|
|
|
type Target = i32;
|
|
|
|
}
|
|
|
|
|
|
|
|
fn main() {
|
|
|
|
let _x: Box<dyn Helper<Target=i32, Output=i32>> = Box::new(2u32);
|
|
|
|
}
|