36 lines
819 B
Rust
36 lines
819 B
Rust
// 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() {}
|