Open lcnr opened 8 months ago
the old solver does not do so during candidate selection, causing the new solver to accept more code:
during coherence
trait Foo {} impl<T> Foo for (u8, T, T) {} trait NotU8 {} trait Bar {} impl<T, U: NotU8> Bar for (T, T, U) {} trait NeedsFixpoint {} impl<T: Foo + Bar> NeedsFixpoint for T {} impl NeedsFixpoint for (u8, u8, u8) {} trait Overlap {} impl<T: NeedsFixpoint> Overlap for T {} impl<T, U: NotU8, V> Overlap for (T, U, V) {}
and outside of it
trait Foo {} impl<T> Foo for (u8, T, T) {} trait NotU8 {} trait Bar {} impl<T, U: NotU8> Bar for (T, T, U) {} trait NeedsFixpoint {} impl<T: Foo + Bar> NeedsFixpoint for T {} impl NeedsFixpoint for (u8, u8, u8) {} fn impls_needs_fixpoint<T: NeedsFixpoint>() {} fn main() { impls_needs_fixpoint::<(_, _, _)>() }
the old solver does not do so during candidate selection, causing the new solver to accept more code:
during coherence
and outside of it