//@ revisions: current next //@ ignore-compare-mode-next-solver (explicit revisions) //@[next] compile-flags: -Znext-solver //@ check-pass // Regression test for trait-system-refactor-initiative#172. // // The next-generation trait solver previously simply tried // to merge the global where-bounds with the impl candidates. // This caused ambiguity in case the where-bound had stricter // region requirements than the impl. trait Trait {} struct Foo<'a, 'b>(&'a (), &'b ()); impl<'a> Trait for Foo<'a, 'static> {} fn impls_trait() {} fn foo() where Foo<'static, 'static>: Trait, { // impl requires `'1 to be 'static // global where-bound requires both '0 and '1 to be 'static // // we always prefer the impl here. impls_trait::>(); } fn main() {}