warning: the feature `impl_trait_in_bindings` is incomplete and may cause the compiler to crash
  --> $DIR/bound-normalization-fail.rs:6:12
   |
LL | #![feature(impl_trait_in_bindings)]
   |            ^^^^^^^^^^^^^^^^^^^^^^
   |
   = note: `#[warn(incomplete_features)]` on by default

error[E0271]: type mismatch resolving `<Foo<()> as FooLike>::Output == <T as impl_trait::Trait>::Assoc`
  --> $DIR/bound-normalization-fail.rs:30:32
   |
LL |     fn foo_fail<T: Trait>() -> impl FooLike<Output=T::Assoc> {
   |                                ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ expected (), found associated type
   |
   = note: expected type `()`
              found type `<T as impl_trait::Trait>::Assoc`
   = note: the return type of a function must have a statically known size

error: `impl Trait` return type cannot contain a projection or `Self` that references lifetimes from a parent scope
  --> $DIR/bound-normalization-fail.rs:47:41
   |
LL |     fn foo2_fail<'a, T: Trait<'a>>() -> impl FooLike<Output=T::Assoc> {
   |                                         ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^

error[E0271]: type mismatch resolving `<Foo<()> as FooLike>::Output == <T as lifetimes::Trait<'static>>::Assoc`
  --> $DIR/bound-normalization-fail.rs:47:41
   |
LL |     fn foo2_fail<'a, T: Trait<'a>>() -> impl FooLike<Output=T::Assoc> {
   |                                         ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ expected (), found associated type
   |
   = note: expected type `()`
              found type `<T as lifetimes::Trait<'static>>::Assoc`
   = note: the return type of a function must have a statically known size

error: aborting due to 3 previous errors

For more information about this error, try `rustc --explain E0271`.
