#![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`
Expected:
Compiles and prints out "default". This is the behavior if you comment out the
impl Serialize<JsonSerializer> for i32.Actual: