// Check that we handle evaluating `wf` predicates correctly. // check-pass struct X(T) where T::V: Clone; fn hide(t: T) -> impl Sized { t } trait A { type U; } impl A for T { type U = T; } trait B { type V; } impl, T> B for S { type V = T; } fn main() { // Evaluating `typeof(x): Sized` requires // // - `wf(typeof(x))` because we use a projection candidate. // - `::V: Clone` because that's a bound on the trait. // - `::V` normalizes to `?1t` where `::U == ?1t` // // This all works if we evaluate `::U == ?1t` before // `::V`, but we previously had the opposite order. let x = hide(X(0)); }