| //@ revisions: classic coherence next |
| //@[next] compile-flags: -Znext-solver |
| //@[coherence] compile-flags: -Znext-solver=coherence |
| //@[classic] check-pass |
| //@[classic] known-bug: #105782 |
| |
| // Should fail. Default items completely drop candidates instead of ambiguity, |
| // which is unsound during coherence, since coherence requires completeness. |
| |
| #![feature(specialization)] |
| #![allow(incomplete_features)] |
| |
| trait Default { |
| type Id; |
| } |
| |
| impl<T> Default for T { |
| default type Id = T; |
| } |
| |
| trait Overlap { |
| type Assoc; |
| } |
| |
| impl Overlap for u32 { |
| type Assoc = usize; |
| } |
| |
| impl Overlap for <u32 as Default>::Id { |
| //[coherence]~^ ERROR conflicting implementations of trait `Overlap` for type `u32` |
| //[next]~^^ ERROR conflicting implementations of trait `Overlap` for type `u32` |
| type Assoc = Box<usize>; |
| } |
| |
| fn main() {} |