なんとなく
impl<X, Y: From<X>, Z: From<Y>> From<X> for Z {
fn from(x: X) -> Z {
Z::from(Y::from(x))
}
}
こんな感じの impl
に相当する何か (もちろんこのコードはコンパイルできない) があって、 From
, Into
は直接の変換がなくても機能すると思っていたが勘違いだった。 Deref
もトレイト自体にコンパイラマジックがあるわけではなく、関数の引数の型に使うときは直接の変換がないと機能しない。