-
Notifications
You must be signed in to change notification settings - Fork 13.8k
Open
Labels
A-specializationArea: Trait impl specializationArea: Trait impl specializationC-bugCategory: This is a bug.Category: This is a bug.F-specialization`#![feature(specialization)]``#![feature(specialization)]`
Description
#![feature(specialization)]
struct JsonSerializer;
struct CborSerializer;
fn main() {
0i32.serialize(&mut CborSerializer);
}
trait Serialize<S: Serializer> {
fn serialize(&self, _: &mut S);
}
trait Serializer {}
impl Serializer for JsonSerializer {}
impl Serializer for CborSerializer {}
impl<S: Serializer> Serialize<S> for i32 {
default fn serialize(&self, _: &mut S) {
println!("default");
}
}
impl Serialize<JsonSerializer> for i32 {
fn serialize(&self, _: &mut JsonSerializer) {
println!("specialized");
}
}
Expected:
Compiles and prints out "default". This is the behavior if you comment out the impl Serialize<JsonSerializer> for i32
.
Actual:
rustc 1.15.0-nightly (71c06a56a 2016-12-18)
error[E0308]: mismatched types
--> <anon>:7:20
|
7 | 0i32.serialize(&mut CborSerializer);
| ^^^^^^^^^^^^^^^^^^^ expected struct `JsonSerializer`, found struct `CborSerializer`
|
= note: expected type `&mut JsonSerializer`
= note: found type `&mut CborSerializer`
aldanor, rubdos and dvc94ch
Metadata
Metadata
Assignees
Labels
A-specializationArea: Trait impl specializationArea: Trait impl specializationC-bugCategory: This is a bug.Category: This is a bug.F-specialization`#![feature(specialization)]``#![feature(specialization)]`