Open
Description
This code stops working with lazy-norm:
#![feature(type_alias_impl_trait)]
trait Mirror {
type Assoc;
}
impl<T> Mirror for T {
type Assoc = T;
}
type Tait<T> = impl Sized;
// Can't actually put `-> Tait<<T as Mirror>::Assoc>` in the return type,
// since the opaque type collector doesn't normalize either.
fn x<T>() -> Tait<T> {
let x: Tait<<T as Mirror>::Assoc> = ();
//~^ But this user type annotation does get normalized before it's
// unified with `()`.
()
}
fn main() {}
We could, perhaps, structurally normalize the opaque params before checking that they're all placeholders...