Specialization does not find the default impl
16a1969
Opened by David Tolnay at
#![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`
#![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`David Tolnay at 2019-10-28 15:28:20
triage: no change
Maayan Hanin at 2022-10-17 18:55:54