trait Mirror { type Assoc; } impl Mirror for T { type Assoc = T; } trait Foo {} // Even though using fulfillment in coherence allows us to figure out that // `?T = ()`, we still treat it as incoherent because `(): Iterator` may be // added upstream. impl Foo for T where (): Mirror {} //~^ NOTE first implementation here impl Foo for T where T: Iterator {} //~^ ERROR conflicting implementations of trait `Foo` for type `()` //~| NOTE conflicting implementation for `()` //~| NOTE upstream crates may add a new impl of trait `std::iter::Iterator` for type `()` in future versions fn main() {}