#![allow(incomplete_features)]
#![feature(generic_associated_types)]

// FIXME(#30472) normalize enough to handle this.

use std::ops::Deref;

trait Foo {
    type Bar<'a, 'b>;
}

trait Baz {
    type Quux<'a>: Foo where Self: 'a;

    // This weird type tests that we can use universal function call syntax to access the Item on
    type Baa<'a>: Deref<Target = <Self::Quux<'a> as Foo>::Bar<'a, 'static>>  where Self: 'a;
}

impl<T> Baz for T where T: Foo {
//~^ ERROR type mismatch resolving
    type Quux<'a> where T: 'a = T;

    type Baa<'a> where T: 'a = &'a <T as Foo>::Bar<'a, 'static>;
}

fn main() {}
