【发布时间】:2019-03-04 06:24:49
【问题描述】:
stable Rust yet 中没有 specialization,所以这不起作用:
trait X {}
impl<T> X for T {}
impl X for u32 {} // conflicting implementation
这并不奇怪:X 是为任何类型 T 实现的,我们不能为 u32 再次实现它。
令人惊讶的是,以下 sn-p 编译成功:
use std::fmt::Display;
pub trait Show {}
impl<T: Display> Show for T {}
impl Show for str {}
// These impls would cause "conflicting implementation" errors:
// impl<'a> Show for &'a str
// impl Show for String
fn main() {}
我不希望这段代码编译,因为Display is implemented for str,所以泛型impl应该为str实现Show并与特定impl冲突。
为什么impl Show for str与impl<T: Display> Show for T不冲突?
【问题讨论】:
标签: rust