A non-default implementation was already made on this type so it cannot be specialized further. Erroneous code example: ```compile_fail,E0520 #![feature(specialization)] trait SpaceLlama { fn fly(&self); } // applies to all T impl SpaceLlama for T { default fn fly(&self) {} } // non-default impl // applies to all `Clone` T and overrides the previous impl impl SpaceLlama for T { fn fly(&self) {} } // since `i32` is clone, this conflicts with the previous implementation impl SpaceLlama for i32 { default fn fly(&self) {} // error: item `fly` is provided by an `impl` that specializes // another, but the item in the parent `impl` is not marked // `default` and so it cannot be specialized. } ``` Specialization only allows you to override `default` functions in implementations. To fix this error, you need to mark all the parent implementations as default. Example: ``` #![feature(specialization)] trait SpaceLlama { fn fly(&self); } // applies to all T impl SpaceLlama for T { default fn fly(&self) {} // This is a parent implementation. } // applies to all `Clone` T; overrides the previous impl impl SpaceLlama for T { default fn fly(&self) {} // This is a parent implementation but was // previously not a default one, causing the error } // applies to i32, overrides the previous two impls impl SpaceLlama for i32 { fn fly(&self) {} // And now that's ok! } ```